Cipher B divergencies for Crypto (Finandy support)Hello Traders!
In times of high volatility, it is important to follow a market-neutral strategy to protect your hard-earned assets. The simple script employs common buy/sell and/or divergencies signals from the VuManChu Cipher B indicator with fixed stop losses and takes profits. The signals are filtered by a local trend of a coin of interest and the global trend of Bitcoin. These trends-filtered signals demonstrated better performance on most of the back- and forward- tests for USDT cryptocurrency futures. The strategy is based on my real experience, it's a diamond I want to share with you.
In terms of visualization if the background is red and the price is below the yellow line then only a short position can be opened. Conversely, if the price is above the yellow line AND the background is green only a long position can be opened.
Inputs from VuManChu you can find on the top. Frankly, I do not know how they can help you to improve the performance of the strategy. My inputs of the script you can find in "Trend Settings" and "TP/SL Settings" at the bottom.
The checkbox "Only divergencies" lets to broadcast only more reliable buy/sell signals for a cost of rare deals.
The checkbox "Cancel all positions if price crosses local sma?" makes additional trailing stop loss. Usually, this function increases the win rate by "smoothing" the risk/reward ratio, as a usual stop loss does.
You can tune SL/TP based on backtesting.
To connect the script to Finandy just edit "name" and "secret" to connect your webhook (see the bottom of the script).
The rule of thumb for the strategy is "only divergencies" - ON, high reward/risk (TP/SL) ratio, 5 min timeframe on chart help with performance.
Finally, I am looking forward to feedback from you. If you have some cool features for my script in your mind, do not hesitate to leave them in the comments.
Good luck!
"stop loss"に関するスクリプトを検索
[DisDev] 12 Candle|Round#|Future SessionsThis indicator has many components; below, each component is explained and how it can be used as a trading tool.
1) Future Lines
a. Vertical lines are projected into the future to mark the beginning of each of the three major markets, Tokyo, London, and New York.
b. When major markets open, this can cause an increase in price action. So this component provides the trader with a reminder of when the next major market opens.
c. Also, the days of the week are displayed to allow the user to backtest price reaction for certain days of the week easily (e.g., Major Markets reopening after the weekend).
2) 12 Hour Candle Sessions High and Low
a. As price intersects with the beginning of the session, the vertical line disappears, and two corresponding horizontal lines begin. These horizontal lines dynamically adjust to mark each session's high and low, and a semi-transparent box fills the space between the high and low lines.
b. The duration of each session is a three-hour window, which each consists of 12 Fifteen-Minute Candles. This marks the hour prior to equity markets open, the opening hour, and the post-open hour.
c. The sessions highs and lows can be selected within the settings show for a 24 hour period. This assists the trader with session range breakouts; three examples of how this could be traded are below.
Example 1
d. The Tokyo and London session high kept the price action within a range. Once it broke the range, the Tokyo and London session highs were used as support, resulting in a range breakout.
Example 2
e. The below picture shows price action failing to break London Session Low and New York Session High; this is followed by Tokyo Low acting as resistance and price moving down 9%.
Example 3
f. Below price action with an increased volume of 323% (based on the average of the last 10 bar) fails to break the Tokyo High on the 1st attempt. The second attempt fails on 241% volume. The third attempt at 475% breaks the range, completing the range breakout seeing a move of 3.4% in price.
4) High of Day (HOD) and Low of Day (LOD)
a. As the trading day unfolds, we mark the HOD (d-High) and LOD (d-Low) with blue dotted horizontal lines. Then at the start of the next trading day, the former High and Low become the Previous Day High (pd-High) and Low (pd-Low) and are changed to dashes.
b. These high and low levels add extra confluence with the session high and lows for Swing Failure Patterns (SFP) and confirmation of trends.
5) Round Numbers
a. As humans, it's hard to use just any number to make sense of things. We prefer to use round numbers. This is important for trading as many traders will automatically use round numbers as their stop losses.
b. This indicator component reminds users of this fact and displays round numbers such as 00, 25, 50, and 75. The indicator automatically calculates and displays lines for the round numbers for as many as twelve levels above and below the current price.
c. Below are examples of how round numbers are broken to trigger stop losses; you may want to break the habit of using round numbers as your stop losses.
Below is the indicator in full swing, displaying all the elements described above.
Day Trading SPYThis script can be used to see a potential trend change, ride a trend and to scalp following the current trend.
Indicators:
- ATR (bright green/maroon) – is a longer term trend ATR line
- MA (green/red) - is a shorter term MA, where the fast MA is dotted and the long MA is a line
- Support and Resistance (white bold line) – long-term support and resistance areas
- Scalping signals (red/green) – small triangles above/below the candles bouncing off fast MA
- Black candles - oversized huge candles, which must be addressed carefully, especially when these candles change the trend per ATR, as with such huge candle – it is hard to determine where to place the stop-loss (if it is above/below the candle, since the candle is so big - it becomes a big risk). Also such candles may point to an unusual market moves. The size can be adjusted from 0.1 and up, it’s set to 1.4 by default, but it can be changed as needed. With such candles, it is best to wait and see what market does. If the black candle is following the ATR trend or changing the trend per ATR – wait for next 1-3 candles or so, usually those re-bounce in the opposite direction of the ATR trend, which allows you to open the position with a tighter stop-loss.
- Olive and Maroon candles – overbought and oversold candles per RSI (80/15 default) levels. At this levels just watch out for a potential soon reversal. Keep in mind, price may continue going oversold/overbought for a while, so look for additional confirmations.
1) ATR (long-term trend): The flag “Buy” and “Sell” signals (can set Alerts), which happens when the price is crossing through ATR line, marking a potential trend change. If ATR matches MA and ideally there is a breakout - open position in the direction of the signal and use the ATR line as your initial hard stop-loss until you reach the first price target / take first profit. It is best to use the most recent high/low pivot or a Fibonacci extension for the first price target. Once you take it – move SL to entry to secure the profits. If the trend continues and you take the next price target, you can use the fastMA (dotted line) as your dynamic stop-loss to ride the trend. Use the bold white line (long-term support and resistance) where price may certainly reverse where you can close your position completely if you day-trading Options.
2) MA (scalping): The small green and red triangles below/above the bars (can set Alerts), which appear when the price “touches” the fast MA (dotted line) and re-bounces from it with the candle matching the direction (bullish/bearish). Make sure ATR and MA are both going in the same direction for best results. This can be used to scalp for small profits or to jump into the trend. To minimize the risk, since you are jumping into the trend, I suggest placing your stop-loss slightly above/below the candle (the one which bounced off the fast MA). Price targets are similar – most recent high/low pivot or a Fibonacci extension. Same way, once you take the first profit/reach the first price target, move SL to entry and on the next price target – use the fast MA as your dynamic stop-loss.
If you don’t know how to divide up your position - here is an example on how I take profits between the price targets:
- Open position with buying a multiple of x4 contracts
- Sell ½ of the position at first price target and move my SL to entry
- Sell ½ of the remaining position at a second price target
- Sell the rest of the position at the third price target or sell ½ of it and use the fast MA as my dynamic stop-loss for the remaining of the position
Also, keep an eye on the breakouts, especially if they go along the ATR and MA trend and keep an eye on the volume, which may help confirming the direction of the price.
MACD + CMF + EMA + Supertrend by TradeSmartHello everyone and welcome to our first script release!
This script is one of many upcoming scripts. This one is a test for us, how it works, how you guys like this kind of stuff, and for feedback what we should change/improve at.
SCRIPT IS OPTIMIZED FOR:
EUR/USD 30 MINUTE TIMEFRAME
Video of the Strategy:
Search for “MACD + CMF + 200 EMA + Supertrend Trading Strategy Tested 100 Times with Great Results!” on our channel.
In this video you can find the exact strategy we programmed, just one added feature: Supertrend trailing stop loss. (position gets closed once the price hits the Supertrend indicator)
Now you can modify the following:
MACD settings
Supertrend settings
EMA settings
CMF settings
We will update the script with more and more features.
The first update will be:
Modifiable risk to reward ratio.
I will make a video of how to use this indicator next week, explaining all the features and more!
Hope you like it! Don't forget to let us know what we should change or improve. Thanks, and have a great day!
STRATEGY ENTRY RULES
LONG
When CMF is above 0 and price is under EMA. Also MACD has made a double cross above the zero line (meaning one cross down and one cross up by the MACD line). Then go long!
Note:
MACD or Signal must return under 0 in order to start a new position
If either of the MACD lines touches the 0 line before entry, we skip the trade and wait for the next signal.
SHORT
When CMF is under 0 and price is under EMA. Also MACD has made a double cross under the zero line (meaning one cross up and one cross down by the MACD line). Then go short!
Note:
MACD or Signal must return under 0 in order to start a new position.
If either of the MACD lines touches the 0 line before entry, we skip the trade and wait for the next signal.
TAKE PROFIT
When price hits the exit price (calculated from stop loss with the risk ratio), then exit with 50% of the position. The other 50% will stay open until the price hits the supertrend or the base stop loss.
STOP LOSS
When price hits stop loss then exit the position. Stop loss is calculated from the Supertrend and it is a trailing one, meaning it changes based on the movement of the price.
QUANTITY TO BUY
The quantity to buy is based on the Risk Per Trade % attribute. This means that we can set how much money we want to risk on one trade. Meaning that if we lose that particular position, then a Risk Per Trade % value of our equity will be lost.
Example: if you set the Risk Per Trade % to 1 % and you have a 100$ account balance, then if you loose the trade you will loose 1$ max.
Multi-Market Swing Trader Webhook Ready [HullBuster]
Introduction
This is an all symbol swing trading strategy intended for webhook integration to live accounts. This script employs an adjustable bandwidth ping pong algorithm which can be run in long only, short only or bidirectional modes. Additionally, this script provides advanced features such as pyramiding and DCA. It has been in development for nearly three years and exposes over 90 inputs to accommodate varying risk reward ratios. Equipped with a proper configuration it is suitable for professional traders seeking quality trades from a cloud based platform. This is my most advanced Pine Script to date which combines my RangeV3 and TrendV2 scripts. Using this combination it tries to bridge the gap between range bound and trending markets. I have put a lot of time into creating a system that could transition by itself so as to require less human intervention and thus be able to withstand long periods in full automation mode.
As a Pine strategy, hypothetical performance can be easily back-tested. Allowing you to Iron out the configuration of your target instrument. Now with recent advancements from the Pine development team this same script can be connected to a webhook through the alert mechanism. The requirement of a separate study script has been completely removed. This really makes things a lot easier to get your trading system up and running. I would like to also mention that TradingView has made significant advancements to the back-end over the last year. Notably, compile times are much faster now permitting more complex algorithms to be implemented. Thank you TradingView!
I used QuantConnect as my role model and strived to produce a base script which could compete with higher end cloud based platforms while being attractive to similarly experienced traders. The versatility of the Pine Language combined with the greater selection of end point execution systems provides a powerful alternative to other cloud based platforms. At the very least, with the features available today, a modular trading system for everyday use is a reality. I hope you'll agree.
This is a swing trading strategy so the behavior of this script is to buy on weakness and sell on strength. In trading parlance this is referred to as Support and Resistance Trading. Support being the point at which prices stop falling and start rising. Resistance being the point at which prices stop rising and fall. The chart real estate between these two points being defined as the range. This script seeks to implement strategies to profit from placing trades within this region. Short positions at resistance and long positions at support. Just to be clear, the range as well as trends are merely illusions as the chart only receives prices. However, this script attempts to calculate pivot points from the price stream. Rising pivots are shorts and falling pivots are longs. I refer to pivots as a vertex in this script which adds structural components to the chart formation (point, sides and a base). When trading in “Ping Pong” mode long and short positions are interleaved continuously as long as there exists a detectable vertex.
This is a non-hedging script so those of us subject to NFA FIFO Rule 2-43(b) should be generally safe to webhook into signals emitted from this script. However, as covered later in this document, there are some technical limitations to this statement. I have tested this script on various instruments for over two years and have configurations for forex, crypto and stocks. This script along with my TrendV2 script are my daily trading vehicles as a webhook into my forex and crypto accounts. This script employs various high risk features that could wipe out your account if not used judiciously. You should absolutely not use this script if you are a beginner or looking for a get-rich-quick strategy. Also please see my CFTC RULE 4.41 disclosure statement at the end of the document. Really!
Does this script repaint? The short answer is yes, it does, despite my best efforts to the contrary. EMAs are central to my strategy and TradingView calculates from the beginning of the series so there is just no getting around this. However, Pine is improving everyday and I am hopeful that this issue will be address from an architectural level at some point in the future. I have programmed my webhook to compensate for this occurrence so, in the mean time, this my recommended way to handle it (at the endpoint and before the broker).
Design
This strategy uses a ping pong algorithm of my own design. Basically, trades bounce off each other along the price stream. Trades are produced as a series of reversals. The point at which a trade reverses is a pivot calculation. A measurement is made between the recent valley to peak which results in a standard deviation value. This value is an input to implied probability calculation.Yes, the same implied probability used in sports betting. Odds are then calculated to determine the likelihood of price action continuing or retracing to the pivot. Based on where the account is at alert time, the action could be an entry, take profit or pyramid signal. In this design, trades must occur in alternating sequence. A long followed by a short then another long followed by a short and so on. In range bound price action trades appear along the outer bands of the channel in the aforementioned sequence. Shorts on the top and longs at the bottom. Generally speaking, the widths of the trading bands can be adjusted using the vertex dynamics in Section 2. There are a dozen inputs in this section used to describe the trading range. It is not a simple adjustment. If pyramids are enabled the strategy overrides the ping pong reversal pattern and begins an accumulation sequence. In this case you will see a series of same direction trades.
This script uses twelve indicators on a single time frame. The original trading algorithms are a port from a C++ program on proprietary trading platform. I’ve converted some of the statistical functions to use standard indicators available on TradingView. The setups make heavy use of the Hull Moving Average in conjunction with EMAs that form the Bill Williams Alligator as described in his book “New Trading Dimensions” Chapter 3. Lag between the Hull and the EMAs play a key role in identifying the pivot points. I really like the Hull Moving Average. I use it in all my systems, including 3 other platforms. It’s is an excellent leading indicator and a relatively light calculation.
The trend detection algorithms rely on several factors:
1. Smoothed EMAs in a Willams Alligator pattern.
2. Number of pivots encountered in a particular direction.
3. Which side debt is being incurred.
4. Settings in Section 4 and 5 (long and short)
The strategy uses these factors to determine the probability of prices continuing in the most recent direction. My TrendV2 script uses a higher time frame to determine trend direction. I can’t use that method in this script without exceeding various TradingView limitations on code size. However, the higher time frame is the best way to know which trend is worth pursuing or better to bet against.
The entire script is around 2400 lines of Pine code which pushes the limits of what can be created on this platform given the TradingView maximums for: local scopes, run-time duration and compile time. The module has been through numerous refactoring passes and makes extensive use of ternary statements. As such, It takes a full minute to compile after adding it to a chart. Please wait for the hovering dots to disappear before attempting to bring up the input dialog box. Scrolling the chart quickly may bring up an hour glass.
Regardless of the market conditions: range or trend. The behavior of the script is governed entirely by the 91 inputs. Depending on the settings, bar interval and symbol, you can configure a system to trade in small ranges producing a thousand or more trades. If you prefer wider ranges with fewer trades then the vertex detection settings in Section 2 should employ stiffer values. To make the script more of a trend follower, adjustments are available in Section 4 and 5 (long and short respectively). Overall this script is a range trader and the setups want to get in that way. It cannot be made into a full blown trend trading system. My TrendV2 is equipped for that purpose. Conversely, this script cannot be effectively deployed as a scalper either. The vertex calculation require too much data for high frequency trading. That doesn’t work well for retail customers anyway. The script is designed to function in bar intervals between 5 minutes and 4 hours. However, larger intervals require more backtest data in order to create reliable configurations. TradingView paid plans (Pro) only provide 10K bars which may not be sufficient. Please keep that in mind.
The transition from swing trader to trend follower typically happens after a stop is hit. That means that your account experiences a loss first and usually with a pyramid stack so the loss could be significant. Even then the script continues to alternate trades long and short. The difference is that the strategy tries to be more long on rising prices and more short on falling prices as opposed to simply counter trend trading. Otherwise, a continuous period of rising prices results in a distinctly short pyramid stack. This is much different than my TrendV2 script which stays long on peaks and short on valleys. Basically, the plan is to be profitable in range bound markets and just lose less when a trend comes along. How well this actually plays out will depend largely on the choices made in the sectioned input parameters.
Sections
The input dialog for this script contains 91 inputs separated into six sections.
Section 1: Global settings for the strategy including calculation model, trading direction, exit levels, pyramid and DCA settings. This is where you specify your minimum profit and stop levels. You should setup your Properties tab inputs before working on any of the sections. It’s really important to get the Base Currency right before doing any work on the strategy inputs. It is important to understand that the “Minimum Profit” and “Limit Offset” are conditional exits. To exit at a profit, the specified value must be exceeded during positive price pressure. On the other hand, the “Stop Offset” is a hard limit.
Section 2: Vertex dynamics. The script is equipped with four types of pivot point indicators. Histogram, candle, fractal and transform. Despite how the chart visuals may seem. The chart only receives prices. It’s up to the strategy to interpret patterns from the number stream. The quality of the feed and the symbol’s bar characteristics vary greatly from instrument to instrument. Each indicator uses a fundamentally different pattern recognition algorithm. Use trial and error to determine the best fit for your configuration. After selecting an indicator type, there are eight analog fields that must be configured for that particular indicator. This is the hardest part of the configuration process. The values applied to these fields determine how the range will be measured. They have a big effect on the number of trades your system will generate. To see the vertices click on the “Show Markers” check box in this section. Red markers are long positions and blue markers are short. This will give you an idea of where trades will be placed in natural order.
Section 3: Event thresholds. Price spikes are used to enter and exit trades. The magnitude which define these spikes are configured here. The rise and fall events are primarily for pyramid placement. The rise and fall limits determine the exit threshold for the conditional “Limit Offset” field found in Section 1. These fields should be adjusted one at a time. Use a zero value to disengage every one but the one you are working on. Use the fill colors found in Section 6 to get a visual on the values applied to these fields. To make it harder for pyramids to enter stiffen the Event values. This is more of a hack as the formal pyramid parameters are in Section 1.
Section 4 and 5: Long and short settings. These are mirror opposite settings with all opposing fields having the same meaning. Its really easy to introduce data mining bias into your configuration through these fields. You must combat against this tendency by trying to keep your settings as uniform as possible. Wildly different parameters for long and short means you have probably fitted the chart. There are nine analog and thirteen Boolean fields per trade direction. This section is all about how the trades themselves will be placed along the range defined in Section 2. Generally speaking, more restrictive settings will result in less trades but higher quality. Remember that this strategy will enter long on falling prices and short on rising prices. So getting in the trade too early leads to a draw-down. However, this could be what you want if pyramiding is enabled. I, personally, have found that the best configurations come from slightly skewing one side. I just accept that the other side will be sub-par.
Section 6: Chart rendering. This section contains one analog and four Boolean fields. More or less a diagnostic tool. Of particular interest is the “Symbol Debt Sequence” field. This field contains a whole number which paints regions that have sustained a run of bad trades equal or greater than specified value. It is useful when DCA is enabled. In this script Dollar Cost Averaging on new positions continues only until the symbol debt is recouped. To get a better understanding on how this works put a number in this field and activate DCA. You should notice how the trade size increases in the colored regions. The “Summary Report” checkbox displays a blue information box at the live end of the chart. It exposes several metrics which you may find useful if manually trading this strategy from audible alerts or text messages.
Pyramids
This script features a downward pyramiding strategy which increases your position size on losing trades. On purely margin trades, this feature can be used to, hypothetically, increase the profit factor of positions (not individual trades). On long only markets, such as crypto, you can use this feature to accumulate coins at depressed prices. The way it works is the stop offset, applied in the Section 1 inputs, determines the maximum risk you intend to bear. Additional trades will be placed at pivot points calculated all the way down to the stop price. The size of each add on trade is increased by a multiple of its interval. The maximum number of intervals is limited by the “Pyramiding” field in the properties tab. The rate at which pyramid positions are created can be adjusted in Section 1. To see the pyramids click on the “Mark Pyramid Levels” check box in the same section. Blue triangles are painted below trades other than the primary.
Unlike traditional Martingale strategies, the result of your trade is not dependent on the profit or loss from the last trade. The position must recover the R1 point in order to close. Alternatively, you can set a “Pyramid Bale Out Offset” in Section 1 which will terminate the trade early. However, the bale out must coincide with a pivot point and result in a profitable exit in order to actually close the trade. Should the market price exceed the stop offset set in Section 1, the full value of the position, multiplied by the accepted leverage, will be realized as a loss to the trading account. A series of such losses will certainly wipe out your account.
Pyramiding is an advanced feature intended for professional traders with well funded accounts and an appropriate mindset. The availability of this feature is not intended to endorse or promote my use of it. Use at your own risk (peril).
DCA
In addition to pyramiding this script employs DCA which enables users to experiment with loss recovery techniques. This is another advanced feature which can increase the order size on new trades in response to stopped out or winning streak trades. The script keeps track of debt incurred from losing trades. When the debt is recovered the order size returns to the base amount specified in the properties tab. The inputs for this feature are found in section 3 and include a limiter to prevent your account from depleting capital during runaway markets. The main difference between DCA and pyramids is that this implementation of DCA applies to new trades while pyramids affect open positions. DCA is a popular feature in crypto trading but can leave you with large “bags” if your not careful. In other markets, especially margin trading, you’ll need a well funded account and much experience.
To be sure pyramiding and dollar cost averaging is as close to gambling as you can get in respectable trading exchanges. However, if you are looking to compete in a spot trading contest or just want to add excitement to your trading life style those features could find a place in your strategies. Although your backtest may show spectacular gains don’t expect your live trading account to do the same. Every backtest has some measure of data mining bias. Please remember that.
Webhook Integration
The TradingView alerts dialog provides a way to connect your script to an external system which could actually execute your trade. This is a fantastic feature that enables you to separate the data feed and technical analysis from the execution and reporting systems. Using this feature it is possible to create a fully automated trading system entirely on the cloud. Of course, there is some work to get it all going in a reliable fashion. To that end this script has several things going for it. First off, it is a strategy type script. That means that the strategy place holders such as {{strategy.position_size}} can be embedded in the alert message text. There are more than 10 variables which can write internal script values into the message for delivery to the specified endpoint. Additionally, my scripts output the current win streak and debt loss counts in the {{strategy.order.alert_message}} field. Depending on the condition, this script will output other useful values in the JSON “comment” field of the alert message. Here is an excerpt of the fields I use in my webhook signal:
"broker_id": "kraken",
"account_id": "XXX XXXX XXXX XXXX",
"symbol_id": "XMRUSD",
"action": "{{strategy.order.action}}",
"strategy": "{{strategy.order.id}}",
"lots": "{{strategy.order.contracts}}",
"price": "{{strategy.order.price}}",
"comment": "{{strategy.order.alert_message}}",
"timestamp": "{{time}}"
Though TradingView does a great job in dispatching your alert this feature does come with a few idiosyncrasies. Namely, a single transaction call in your script may cause multiple transmissions to the endpoint. If you are using placeholders each message describes part of the transaction sequence. A good example is closing a pyramid stack. Although the script makes a single strategy.close() call, the endpoint actually receives a close message for each pyramid trade. The broker, on the other hand, only requires a single close. The incongruity of this situation is exacerbated by the possibility of messages being received out of sequence. Depending on the type of order designated in the message, a close or a reversal. This could have a disastrous effect on your live account. This broker simulator has no idea what is actually going on at your real account. Its just doing the job of running the simulation and sending out the computed results. If your TradingView simulation falls out of alignment with the actual trading account lots of really bad things could happen. Like your script thinks your are currently long but the account is actually short. Reversals from this point forward will always be wrong with no one the wiser. Human intervention will be required to restore congruence. But how does anyone find out this is occurring? In closed systems engineering this is known as entropy. In practice your webhook logic should be robust enough to detect these conditions. Be generous with the placeholder usage and give the webhook code plenty of information to compare states. Both issuer and receiver. Don’t blindly commit incoming signals without verifying system integrity.
Operation
This is a swing trading strategy so the fundamental behavior of this script is to buy on weakness and sell on strength. As such trade orders are placed in a counter direction to price pressure. What you will see on the chart is a short position on peaks and a long position on valleys. This is slightly misleading since a range as well as a trend are best recognized, in hindsight, after the patterns occur on the chart. In the middle of a trade, one never knows how deep valleys will drop or how high peaks will rise. For certain, long trades will continue to trigger as the market prices fall and short trades on rising prices. This means that the maximum efficiency of this strategy is achieved in choppy markets where the price doesn’t extend very far from its adjacent pivot point. Conversely, this strategy will be the least efficient when market conditions exhibit long continuous single direction price pressure. Especially, when measured in weeks. Translation, the trend is not your friend with this strategy. Internally, the script attempts to recognize prolonged price pressure and changes tactics accordingly. However, at best, the goal is to weather the trend until the range bound market returns. At worst, trend detection fails and pyramid trades continue to be placed until the limit specified in the Properties tab is reached. In all likelihood this could trigger a margin call and if it hits the stop it could wipe out your account.
This script has been in beta test four times since inception. During all that time no one has been successful in creating a configuration from scratch. Most people give up after an hour or so. To be perfectly honest, the configuration process is a bear. I know that but there is no way, currently, to create libraries in Pine. There is also no way specify input parameters other than the flattened out 2-D inputs dialog. And the publish rules clearly state that script variations addressing markets or symbols (suites) are not permitted. I suppose the problem is systemic to be-all-end-all solutions like my script is trying to be. I needed a cloud strategy for all the symbols that I trade and since Pine does not support library modules, include files or inter process communication this script and its unruly inputs are my weapon of choice in the war against the market forces. It takes me about six hours to configure a new symbol. Also not all the symbols I configure are equally successful. I should mention that I have a facsimile of this strategy written in another platform which allows me to run a backtest on 10 years of historical data. The results provide me a sanity check on the inputs I select on this platform.
My personal configurations use a 10 minute bar interval on forex instruments and 15 minutes on crypto. I try to align my TradingView scripts to employ standard intervals available from the broker so that I can backtest longer durations than those available on TradingView. For example, Bitcoin at 15 minute bars is downloadable from several sources. I really like the 10 minute bar. It provides lots of detectable patterns and is easy to store many years in an SQL database.
The following steps provide a very brief set of instructions that will get you started but will most certainly not produce the best backtest. A trading system that you are willing to risk your hard earned capital will require a well crafted configuration that involves time, expertise and clearly defined goals. As previously mentioned, I have several example configurations that I use for my own trading that I can share with you if you like. To get hands on experience in setting up your own symbol from scratch please follow the steps below.
Step 1. Setup the Base currency and order size in the properties tab.
Step 2. Select the calculation presets in the Instrument Type field.
Step 3. Select “No Trade” in the Trading Mode field
Step 4. Select the Histogram indicator from Section 2. You will be experimenting with different ones so it doesn’t matter which one you try first.
Step 5. Turn on Show Markers in Section 2.
Step 6. Go to the chart and checkout where the markers show up. Blue is up and red is down. Long trades show up along the red markers and short trades on the blue.
Step 7. Make adjustments to “Base To Vertex” and “Vertex To Base” net change and ROC in Section 2. Use these fields to move the markers to where you want trades to be.
Step 8. Try a different indicator from Section 2 and repeat Step 7 until you find the best match for this instrument on this interval. This step is complete when the Vertex settings and indicator combination produce the most favorable results.
Step 9. Go to Section 4 and enable “Apply Red Base To Base Margin”.
Step 10. Go to Section 5 and enable “Apply Blue Base To Base Margin”.
Step 11. Go to Section 2 and adjust “Minimum Base To Base Blue” and “Minimum Base To Base Red”. Observe the chart and note where the markers move relative to each other. Markers further apart will produce less trades but will reduce cutoffs in “Ping Pong” mode.
Step 12. Turn off Show Markers in Section 2.
Step 13. Put in your Minimum Profit and Stop Loss in the first section. This is in pips or currency basis points (chart right side scale). Percentage is not currently supported. Note that the profit is taken as a conditional exit on a market order not a fixed limit. The actual profit taken will almost always be greater than the amount specified. The stop loss, on the other hand, is indeed a hard number which is executed by the TradingView broker simulator when the threshold is breached.
Step 14. Return to step 3 and select a Trading Mode (Long, Short, BiDir, Ping Pong). If you are planning to trade bidirectionally its best to configure long first then short. Combine them with “BiDir” or “Ping Pong” after setting up both sides of the trade individually. The difference between “BiDir” and “Ping Pong” is that “Ping Pong” uses position reversal and can cut off opposing trades less than the specified minimum profit. As a result “Ping Pong” mode produces the greatest number of trades.
Step 15. Take a look at the chart. Trades should be showing along the markers plotted earlier.
Step 16. Make adjustments to the Vertex fields in Section 2 until the TradingView performance report is showing a profit. This includes the “Minimum Base To Base” fields. If a profit cannot be achieved move on to Step 17.
Step 17. Improve the backtest profitability by adjusting the “Entry Net Change” and “Entry ROC” in Section 4 and 5.
Step 18. Enable the “Mandatory Snap” checkbox in Section 4 and 5 and adjust the “Snap Candle Delta” and “Snap Fractal Delta” in Section 2. This should reduce some chop producing unprofitable reversals.
Step 19. Increase the distance between opposing trades by adding an “Interleave Delta” in Sections 4 and 5. This is a floating point value which starts at 0.01 and typically does not exceed 2.0.
Step 20. Increase the distance between opposing trades even further by adding a “Decay Minimum Span” in Sections 4 and 5. This is an absolute value specified in the symbol’s quote currency (right side scale of the chart). This value is similar to the minimum profit and stop loss fields in Section 1.
Step 21. The “Buy Composite Strength” input works in tandem with “Long Decay Minimum Span” in Section 4. Try enabling and see if it improves the performance. This field is only relevant when there is a value in “Long Decay Minimum Span”.
Step 22. The “Sell Composite Weakness” input works in tandem with “Short Decay Minimum Span” in Section 5. Try enabling and see if it improves the performance. This field is only relevant when there is a value in “Short Decay Minimum Span”.
Step 23. Improve the backtest profitability by adjusting the “Adherence Delta” in Section 4 and 5. This field requires the “Adhere to Rising Trend” checkbox to be enabled.
Step 24. At this point your strategy should be more or less working. Experiment with the remaining check boxes in Section 4 and 5. Keep the ones which seem to improve the performance.
Step 25. Examine the chart and see that trades are being placed in accordance with your desired trading goals. This is an important step. If your desired model requires multiple trades per day then you should be seeing hundreds of trades on the chart. Alternatively, you may be looking to trade fewer steep peaks and deep valleys in which case you should see trades at major turning points. Don’t simply settle for what the backtest serves you. Work your configuration until the system aligns with your desired model. Try changing indicators and even intervals if you cannot reach your simulation goals. Generally speaking, the histogram and Candle indicators produce the most trades. The Fractal indicator captures the tallest peaks and valleys. The Transform indicator is the most reliable but doesn’t well work on all instruments.
Example Settings
To reproduce the performance shown on the chart please use the following configuration:
1. Select XBTUSD Kraken as the chart symbol.
2. On the properties tab set the Order Size to: 0.01 Bitcoin
3. On the properties tab set the Pyramiding to: 10
4. In Section 1: Select “Forex” for the Instrument Type
5. In Section 1: Select “Ping Pong” for the Trading Mode
6. In Section 1: Input 1200 for the Minimum Profit
7. In Section 1: Input 15000 for the Stop Offset
8. In Section 1: Input 1200 for the Pyramid Minimum Span
9. In Section 1: Check mark the Ultra Wide Pyramids
10. In Section 2: Check mark the Use Transform Indicator
So to be clear, I used a base position size of one - one hundredth of a Bitcoin and allow the script to add up to 10 downward pyramids. The example back-test did hit eight downward pyramids. That means the account would have to be able to withstand a base position size (0.01) times 28. The resulting position size is 0.28 of a Bitcoin. If the price of Bitcoin is 35K then the draw down amount (not including broker fees) would be $9800 dollars. Since I have a premium subscription my backtest chart includes 20K historical bars. That's roughly six months of data. As of today, pro accounts only get 10K bars so the performance cannot be exactly matched with such a difference in historical data. Please keep that in mind.
There are, of course, various ways to reduce the risk incurred from accumulating pyramids. You can increase the “Pyramid Minimum Span” input found in Section 2 which increases the space between each pyramid trade. Also you can set a “Pyramid Bale Out Offset” in the same input section. This lets you out of the trade faster on position recovery. For example: Set a value of 8000 into this input and the number of trades increase to 178 from 157. Since the positions didn’t go full term, more trades were created at less profit each. The total brute force approach would be to simply limit the number of pyramids in the Properties tab.
It should be noted that since this is crypto, accumulating on the long side may be what you want. If you are not trading on margin and thus outright buying coins on the Kraken exchange you likely are interested in increasing your Bitcoin position at depressed prices. This is a popular feature on some of the other crypto trading packages like CryptoHopper and Profit Trailer. Click on Enable TV Long Only Rule in Section 1. This switches the signal emitter to long only. However, you may still see short trades on the chart. They are treated as a close instead of a reversal.
Feel free to PM me with any questions related to this script. Thank you and happy trading!
CFTC RULE 4.41
These results are based on simulated or hypothetical performance results that have certain inherent limitations. Unlike the results shown in an actual performance record, these results do not represent actual trading. Also, because these trades have not actually been executed, these results may have under-or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity. Simulated or hypothetical trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will or is likely to achieve profits or losses similar to these being shown.
supertrend with 2tp by AkHi traders
This strategy is based on two take profit targets and scaling out strategy. The entry rule is very simple. Whenever supertrend show long trade is taken and vice versa...and you have to use minimum 2 contract size
Take Profit and Stop Loss
The first take profit is set at 3 points above the long entry and the second take profit is set at 6 points above the long entry. Meanwhile, the stop loss is set at 3 points below the long entry....u can change points for profit and loss
Money Management
When the first take profit is achieved, half of the position is closed. The rest of the position is open to achieve either second take profit or stop loss.
There are three outcomes when using this strategy. Let's say you enter the trade with 200 lot size and you are risking 2% of your equity.
1. The first outcome is when the price hits stop loss, you lose the entire 2%.
2. The second outcome is when the price hits the first take profit and you close half of your position. Meaning that you have gained 1%. Then you let the trade running and eventually it hits stop loss. The total loss is 0% because the remaining lot size which is 200/2=100 times by 20pips is 1%. You have gained the earlier 1% and then loss 1%. At this point, you are at break even.
3. The third outcome is similar to the second out but instead of hiring stop loss, the trade is running to your favor and hits the second take profit.
Therefore, you gained 1% from the first take profit and you gained another 2% for the second take profit. Your total gained is 3%
*FIBAUS BUY and SELL Trender V2 with AlertsFIBAUS BUY and SELL Trender v2 with ALERTS: Hit me up if you want access.
Always be on the right side of the trade and know where to place the stop loss.
Its a very consistent system allowing for a low risk, high gain trading stratergy. Simply wait for the signal to show as BUY or SELL (LONG or SHORT) and place the order.
SET YOUR ALERTS and WAIT!
Tight stops losses are placed above (Sell/shorts) and below (Buy/Long) orders.
Horizonatal plot lines are to be used as Targets and reversal zones. Green lines are support zones and red lines act as resistance zones.
The Lagging line is the 200 EMA which give me a view of the overall trend of the market and indicates if I should only take Buy or Sell orders. When the 200 is RED, I only sell/short. When it is GREEN, I only Buy/Long.
NB: In trading support and resistance zones interchange. This means that supports can become resistance and resistance can become support zones.
For BTC/XBT, I use 2 hour candles.
Forex, I use 1 hour and 3 hour candles.
For Options I use the 1 hour candles.
Stop Loss stays the same for all types (which is above or below the candle signaling buy or sell.
Hit me up if you want access.
Happy Trading !!
FIBAUS
*FIBAUS BUY and SELL TrenderFIBAUS BUY and SELL Trender: Always be on the right side of the trade and know where to place the stop loss.
Its a very consistent system allowing for a low risk, high gain trading stratergy. Simply wait for the signal to show as BUY or SELL (LONG or SHORT) and place the order.
Tight stops losses are placed above (Sell/shorts) and below (Buy/Long) orders.
Horizonatal plot lines are to be used as Targets and reversal zones. Green lines are support zones and red lines act as resistance zones.
The Lagging line is the 200 EMA which give me a view of the overall trend of the market and indicates if I should only take Buy or Sell orders. When the 200 is RED, I only sell/short. When it is GREEN, I only Buy/Long.
NB: In trading support and resistance zones interchange. This means that supports can become resistance and resistance can become support zones.
For BTC/XBT, I use 2 hour candles.
Forex, I use 1 hour and 3 hour candles.
For Options I use the 1 hour candles.
Stop Loss stays the same for all types (which is above or below the candle signaling buy or sell.
Hit me up if you want access.
Happy Trading !!
FIBAUS
Trailing % StopTrailing % Stop is a simple Stop Loss indicator which users have to define a % percent rate to trail the price like MOVING STOP LOSS "MOST" Indicator.
The main difference is MOST refers to exponential moving averages although Trail % Stop refers to source price.
Default price of source is CLOSE price which can be optimized by the user.
"What is a Trailing Stop-Loss?
A trailing stop-loss order is a special type of trade order where the stop-loss price is not set at a single, absolute dollar amount, but instead is set at a certain percentage or a certain dollar amount below the market price. A trailing stop-loss is sometime referred to simply as a trailing stop.
How a Trailing Stop-Loss Works
When the price goes up, it drags the trailing stop-loss along with it, but when the price stops going up, the stop-loss price remains at the level it was dragged to.
A trailing stop-loss is a way to automatically protect yourself from an investment's downside while locking in the upside.
For example, you buy Company XYZ for $10. You decide that you don't want to lose more than 5% on your investment, but you want to be able to take advantage of any price increases. You also don't want to have to constantly monitor your trades to lock in gains.
You set a trailing stop on XYZ that orders your broker to automatically sell if the price dips more than 5% below the market price.
The benefits of the trailing stop are two-fold. First, if the stock moves against you, the trailing stop will trigger when XYZ hits $9.50, protecting you from futher downside.
But if the stock goes up to $20, the trigger price for the trailing stop comes up along with it. At a price of $20, the trailing stop will only trigger a sale if the stock drops below $19. This helps you lock in most of the gains from the stock's rally.
In the example, you could also decide you don't want to lose more than $2 on your $10 investment. If the stock goes up to $20, the trailing stop-loss would drag along behind the price and only trigger a sale if the stock falls to $18.
Why a Trailing Stop-Loss Matters
A trailing stop-loss can be good for investors who may not have enough discipline to lock-in gains or cut losses. It removes some of the emotion from the trading process and offers some capital protection automatically.
There are some drawbacks to consider. First, you need to consider your trailing stop percentage or amount very carefully. If you're investing in a particularly volatile stock, you could find the stop level triggered fairly frequently."
Long Short signals and alarms are also included.
™TradeChartist Entry/Exit Indicator™TradeChartist Entry/Exit Indicator is an easy to use indicator that plots very high probability BUY and SELL signals on the chart along with an optional dynamic trigger line for SELL and BUY which can be used as a reference for Stop Loss/ Trailing Stop Loss.
What does the ™TradeChartist Entry/Exit Indicator do?
Plots very high probability BUY and SELL signals on chart
Plots dynamic BUY or SELL trigger lines that can be used to
---------1. Set Stop Loss reference or Trailing Stop Loss.
---------2. Anticipate change in trend/momentum when price breaches the trigger line.
Plots BUY and SELL price lines which are Candle open prices when BUY/SELL signals are posted.
Alert traders when BUY/SELL signal is generated and Trigger for BUY/SELL is breached.
Plots Background vertical Signal break lines at BUYs in green and at SELLs in red.
Plots % Gains based on candle close in real-time and based on candle high for BUY/candle low for SELL on previous candles calculated from the candle open price at BUY/SELL.
Plots RSI colour candles based on user preferred Overbought and Oversold RSI levels from indicator settings.
Paints background colour for BUY and SELL zones which can be changed from indicator settings under Style tab to personalise the chart screen.
What markets can this indicator be used on?
Forex
Stocks
Commodities
Cryptocurrencies
and almost any asset on Trading View
Works really well when there is good volume, volatility or both in the asset observed/traded.
Does this indicator repaint?
No and Yes
Once the confirmed BUY (in green) and SELL (in red) signals are posted after a candle close, it doesn't repaint.
Repainting happens for real time BUY and SELL trigger plots on the current candle as price tries to breach the trigger line.
For confirmed BUY and SELL alerts, use alerts on candle close. Real-time BUY and SELL trigger alerts can also be set.
Does the indicator send alerts when a signal is generated?
Yes, traders can get alerts by setting Trading View alerts for BUY/SELL Signals and BUY/SELL Triggers. For confirmed BUY/SELL alerts, 'Once per bar close' must be used.
Why are there two Signal Generator types in the indicator settings?
The two types of signal generators cater to almost all types of traders and trade types. Some assets perform well with Type 1 and some assets with Type 2. Also some traders prefer Type 1 and some prefer Type 2 based on variation in frequency of signals on the asset observed. Both types can be used along with 'Use Heikin Ashi Candles' from the indicator settings to have more combinations to test on an asset for maximising gains.
Type 1 on GBPUSD 1hr chart
Type 2 on GBPUSD 1hr chart
Type 1 normally works well with most types of assets.
Should the indicator be used on normal candles or Heikin Ashi candles?
The indicator can be used on either of the candle types. If signals from Heikin Ashi chart needs to be plotted on normal chart, just check 'Use Heikin Ashi Candles' from indicator settings. It may not be exact, but very close as it mimics Heikin Ashi chart trend.
Heikin Ashi charts are recommended to spot trends and reversals but they don't reflect real OHLC values in the candles, so BUY/SELL entry price points may not be ideal using Heikin Ashi charts especially when there are gaps in price action (example Stocks, FOREX, Commodities). For real OHLC prices and to know exact price points for entering/exiting trade, use normal candlestick charts. It is purely for this reason Heikin Ashi chart signals can be mimicked on normal candles using 'Use Heikin Ashi Candles' option from settings without having to switch between the two.
It can be seen from the GOLD 1hr charts above (Heikin Ashi on left and normal candlestick chart on right), the indicator mimics signals sensibly (not copy) and doesn't use same entry values as Heikin Ashi chart to aid the trader with practical trade execution.
How do the Trigger Lines work and should they be used?
Trigger for BUY/SELL lines are coded to adapt to bull and bear power in the asset trading environment and helps the trader to anticipate change in trend based on direction of price momentum when enabled from indicator settings (On by default). Traders can use trigger lines as reference for Stop Loss points. For example, when a BUY signal is posted, the 'Trigger for SELL' can be used as initial Stop Loss reference and as price starts going up, the trigger line starts moving up enabling the trader to use it as a trailing stop loss point which helps secure or lock profits as they act as ideal support/resistance lines based on the type of trade too. BUY/SELL Trigger lines can be enabled or disabled from indicator settings 'Inputs' tab.
Also, the trigger lines can alert traders to anticipate change in trend/momentum when price hits them and it helps them take a position, either Long or Short when confirmed BUY/SELL signal is posted. As price tries to breach the trigger lines, they change from 'Trigger to BUY/SELL' to 'BUY/SELL Triggered' as shown below on 1hr Gold chart. This feature is coded purely to signal the trader a potential change in trend/momentum. The trigger lines also act as strong support/resistance so only a confirmed close above them will ensure a High Probability Trade.
It should also be noted that price tends to test the BUY/SELL trigger lines to see if a breach is possible. A rejection at trigger lines could mean trend continuation in the signal direction. Traders could use other trend indicators like Ichimoku cloud, stoch, TRIX etc. to make an informed trade decision here. In the chart below, the 'BUY triggered' label has changed back to 'Trigger for BUY' as price failed to close above it.
What is the use of 'Plot BUY/SELL Price Line'?
Enabling BUY/SELL price line from settings (On by default) plots the price line corresponding to candle open when BUY/SELL signals were posted on the chart by the indicator. Open price is used as it is close to the trigger lines and is a fair reference point for indicator to calculate the gains plot on chart since BUY/SELL signals.
Can trade gains be plotted on chart and how are they calculated?
To show percentage gains on chart, just enable 'Show % Gains on Chart' from indicator settings (Off by default). As explained above, % gains are calculated from BUY/SELL candle Open price to high (for Long trades) or low (for Short trades) and to current candle close (for both Long and Short trades) as it helps see real-time gains from BUY/SELL candle Open price. The % gains are plotted as below.
0 - 0.75% - ↑ in green
0.75-1.5% - 1% in green
1.51-2.5% - 2% in green
2.51-3.5% - 3% in green
3.51-4.5% - 4% in green
4.51-5.5% - 5% in green
5.51-10.5% - 5+% in green
10.51-20% - 10+% in green
20+% - 20+% in green
Down from Entry - ↓ in red
What are RSI Colour Candles?
RSI Colour Candles are visual candle plots in colour (Blue when RSI>60, Yellow when RSI<30 and On by default) that help trades spot RSI levels at a glance visually from the chart in real-time without the need for another indicator on screen. Traders can also choose the source to be used for plotting RSI colour candles from indicator settings input tab and change candle colours from indicator settings style tab. The length for RSI calculation is 14 and works well for almost any trading scenario and cannot be changed from indicator settings. The default overbought RSI is set at 60 as it helps spot momentum increase and big moves happen above 60 RSI. When deciding to sell or buy, RSI can be tuned from settings to spot decent entry or exit. For example, RSI>80 on a red Heikin Ashi candle (blue body and red border) after an uptrend could signal potential sell-off or RSI<30 on a green Heikin Ashi candle (yellow body and green border) after a down trend could signal a good move up. In the example daily chart of RVN-BTC below, RSI>75 on a red Heikin Ashi candle signalled a potential sell off way before the actual SELL signal plot on chart.
What is the use of Signal Break Line Plot and Paint Background options from indicator settings?
Signal break lines can be useful if traders prefer to switch off BUY/SELL signals from indicator settings to show where previous signals were generated. (On by default)
Paint Background is just a nice to have feature that paints the signal zones to personalise the chart screen. (Off by default). The background paint colours can be changed from indicator settings style tab.
4hr SPX chart below showcases the difference when the Signal Break Lines and Background Paint options are used with BUY/SELL signals switched off.
Important Note:
When using this indicator on a chart, check 'Scale Price Chart Only' and 'Auto (Fits Data to Screen)' by clicking on settings wheel on the bottom right under the chart screen as shown below. If not checked, the chart screen will look like one on the left as shown below.
-----------------------------------------------------------------------------------------
This is not a free to use indicator. Get in touch with me if you would like access to the indicator for a 1 day trial before deciding on a paid access for a period of your choice. Monthly, Quarterly, Half-Yearly and 1 Year access available.
-----------------------------------------------------------------------------------------
Momentum Trader Strategy 3.0Momentum Trader 3.0 is a momentum trading strategy which uses volume to confirm market momentum driven moves.
By default it only trades between 0900 and 1530 (designed for futures trading and can be toggled to 24/7)
No repaint issues, what you see is real
Toggles allow you to enable Long or Short independently which may work better or worse for your market
Designed primarily for Day Trading (1-15m interval)
Presently only the Short side is optimized, the Long works but overtrades a bit. I will be adding an option to remove the less useful signals and improve performance.
Momentum Trader is a real and successful momentum strategy (which I use myself). It isn't a miracle 'always win' strategy but it is a steady workhorse. By combining high probability momentum trades and auto stop-losses, it takes a good slice of most rallies, a big slice of the grand drops, and avoids heavy sudden losses.
Momentum Trader can be used in any timeframe. Your success depends on the volatility of the individual market. I recommend trading at 10m and below for high volatility instruments like ES/SPX while low volatility instruments can be traded at the 1h and beyond. At the level of 1D+ it also works as well but naturally as a momentum strategy it may take a while to pivot.
Momentum Trader provides you with 3 long and 2 short entries which represent different levels of risk/reward. Like any real strategy, there can be periods of chop where the strategy will lose (small based on stop-loss) if the market is chopping very quickly back and forth or pivoting suddenly. As a rule, Momentum Trader attempts to avoid most of that by typically flagging trends which are established and confirmed. Different signals give you different degrees of confirmation and thus different risk/reward.
Default Strategy Inputs (Forex / Crypto)The code in this post contains a set of default strategy inputs I use in new projects / backtests in Tradingview.
Full code commentary is available on the Backtest-Rookies website. To comply with house rules, I cannot post the direct link here.
Features
Trade Direction: So that you can limit the strategy for long only, short only or trade in both directions. It is important to note that when you select “Long Only”, you will still see Short signals on the chart. However, they are only used to close a position rather than reverse it. This is the default behaviour for strategies. The same applies to “Short Only”.
Date Ranges: So that you can isolate backtesting to specific periods of interest such as bull or bear markets.
Sessions: So you can easily get an idea of the expected results during your own session. You may also notice that performance of the strategy varies depending on which session it is deployed in.
Some example stop losses: It is not an exhaustive list but it should be enough to provide some inspiration for different types of stops that you can experiment with.
Happy Scripting. I hope the community finds it useful.
Mayfair FX Scalper V-10 Price Action + SMC//@version=5
indicator("Mayfair FX Scalper V-10 Price Action + SMC", overlay=true)
// === INPUTS ===
rsiLength = input.int(14, title="RSI Length")
overbought = input.float(73, title="SELL Level")
oversold = input.float(31, title="BUY Level")
rsiSrc = input.source(open, title="RSI Source")
// === Color Inputs ===
entryLineColor = input.color(color.white, title="entry Label Color")
entryLabelColor = input.color(color.white, title="entry Lable Color")
slLineColor = input.color(color.red, title="Stop Loss Line Color")
slLabelColor = input.color(color.red, title="Stop Loss Label Color")
tpLineColor = input.color(color.blue, title="Take Profit Line Color")
tpLabelColor = input.color(color.blue, title="Take Profit Color")
entryTextColor = input.color(color.rgb(0, 0, 0) , title="entry Text Color")
slTextColor = input.color(color.white, title="Stop Lose Color")
tpTextColor = input.color(color.white, title="Take Profit Text Color")
//indicator("Author Info Display"
// Create table
var table infoTable = table.new(position.top_right, 2, 6, bgcolor=color.new(#000000, 1), border_width=1)
if barstate.islast
table.cell(infoTable, 0, 0, "Author:", text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 0, "MR WOW", text_color=color.rgb(255, 251, 0), text_size=size.large)
table.cell(infoTable, 0, 1, "YouTube:", text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 1, "www.youtube.com/@iammrwow", text_color=color.rgb(255, 251, 0), text_size=size.small)
table.cell(infoTable, 0, 3, "Website:", text_color=color.white, text_size=size.small)
table.cell(infoTable, 1, 3, "www.mrwowea.com", text_color=color.rgb(255, 251, 0), text_size=size.small)
// === RSI CALCULATION ===
rsi = ta.rsi(rsiSrc, rsiLength)
rawBuySignal = rsi < oversold
rawSellSignal = rsi > overbought
// === Confirmed Signals ===
isBullish = close > open
isBearish = close < open
newBuy = rawBuySignal and isBullish and close > open == false
newSell = rawSellSignal and isBearish and close < open == false
// === Trade State Variables ===
var bool inPosition = false
var bool isBuy = false
var float entryPrice = na
var float slPrice = na
var float tp1Price = na
var float tp2Price = na
var float tp3Price = na
var int entryBarIndex = na
var label labels = array.new()
var line lines = array.new()
// === Instrument & Timeframe SL/TP Setup ===
isGold = str.contains(syminfo.ticker, "XAU") or str.contains(syminfo.ticker, "GOLD")
instrumentType = syminfo.type == "crypto" ? "Crypto" : isGold ? "Gold" : syminfo.currency == "JPY" ? "JPY" : "Forex"
tf = timeframe.period
slPipsGold = tf == "1" ? 30 : tf == "3" ? 45 : tf == "5" ? 50 : tf == "15" ? 60 : 70
slPipsCrypto = tf == "1" ? 5 : tf == "3" ? 8 : tf == "5" ? 12 : tf == "15" ? 15 : 10
slPipsForex = tf == "1" ? 6 : tf == "3" ? 9 : tf == "5" ? 11 : tf == "15" ? 15 : 15
gold_slDist = 0.1 * slPipsGold
gold_tp1Dist = gold_slDist
gold_tp2Dist = gold_slDist * 2
gold_tp3Dist = gold_slDist * 3
pipSize = instrumentType == "Crypto" ? 1.0 : instrumentType == "Gold" or instrumentType == "JPY" ? 0.01 : 0.0001
slPips = instrumentType == "Crypto" ? slPipsCrypto : instrumentType == "Gold" ? slPipsGold : slPipsForex
slDist = slPips * pipSize
tp1Dist = slDist
tp2Dist = slDist * 2
tp3Dist = slDist * 3
// === Draw Line & Label ===
drawLine(y, txt, col, lblCol, extendToCurrent) =>
int lineEnd = extendToCurrent ? bar_index : entryBarIndex + 2
array.push(lines, line.new(entryBarIndex, y, lineEnd, y, color=col, width=2, extend=extend.none))
textCol = str.contains(txt, "Entry") ? entryTextColor : str.contains(txt, "Stop") ? slTextColor : tpTextColor
array.push(labels, label.new(lineEnd, y, txt, style=label.style_label_left, color=color.new(lblCol, 0), textcolor=textCol, size=size.small))
// === Check Exit ===
slHit = inPosition and ((isBuy and low <= slPrice) or (not isBuy and high >= slPrice))
tp3Hit = inPosition and ((isBuy and high >= tp3Price) or (not isBuy and low <= tp3Price))
shouldExit = slHit or tp3Hit
if shouldExit
for l in labels
label.delete(l)
array.clear(labels)
for ln in lines
line.delete(ln)
array.clear(lines)
inPosition := false
entryPrice := na
slPrice := na
tp1Price := na
tp2Price := na
tp3Price := na
entryBarIndex := na
// === Confirmed Signal with No Position ===
confirmedBuy = not inPosition and newBuy
confirmedSell = not inPosition and newSell
// === Signal Markers ===
plotshape(series=confirmedBuy, location=location.belowbar, color=color.rgb(33, 150, 243), style=shape.triangleup, text="BUY", textcolor=color.rgb(33, 150, 243))
plotshape(series=confirmedSell, location=location.abovebar, color=color.rgb(254, 254, 255), style=shape.triangledown, text="SELL", textcolor=color.rgb(239, 238, 247))
// === Entry Execution ===
if confirmedBuy or confirmedSell
entryPrice := close
entryBarIndex := bar_index
isBuy := confirmedBuy
inPosition := true
if isGold
slPrice := isBuy ? entryPrice - gold_slDist : entryPrice + gold_slDist
tp1Price := isBuy ? entryPrice + gold_tp1Dist : entryPrice - gold_tp1Dist
tp2Price := isBuy ? entryPrice + gold_tp2Dist : entryPrice - gold_tp2Dist
tp3Price := isBuy ? entryPrice + gold_tp3Dist : entryPrice - gold_tp3Dist
else
slPrice := isBuy ? entryPrice - slDist : entryPrice + slDist
tp1Price := isBuy ? entryPrice + tp1Dist : entryPrice - tp1Dist
tp2Price := isBuy ? entryPrice + tp2Dist : entryPrice - tp2Dist
tp3Price := isBuy ? entryPrice + tp3Dist : entryPrice - tp3Dist
drawLine(entryPrice, "Entry Price - After Candle Above Entry Price Then Place Trade: " + str.tostring(entryPrice), entryLineColor, entryLabelColor, false)
drawLine(slPrice, "Stop Loss: " + str.tostring(slPrice), slLineColor, slLabelColor, false)
drawLine(tp1Price, "(1:1) Take Profit: " + str.tostring(tp1Price), tpLineColor, tpLabelColor, false)
drawLine(tp2Price, "(2:1) Take Profit: " + str.tostring(tp2Price), tpLineColor, tpLabelColor, false)
drawLine(tp3Price, "(3:1) Take Profit: " + str.tostring(tp3Price), tpLineColor, tpLabelColor, false)
// === Update TP/SL Lines if Still in Trade ===
if inPosition and not (confirmedBuy or confirmedSell)
for ln in lines
line.delete(ln)
array.clear(lines)
for l in labels
label.delete(l)
array.clear(labels)
drawLine(entryPrice, "After Candle Closed Above Entry Line Buy & Below Sell :Entry Price-" + str.tostring(entryPrice), entryLineColor, entryLabelColor, true)
drawLine(slPrice, "Stop Loss: " + str.tostring(slPrice), slLineColor, slLabelColor, true)
drawLine(tp1Price, "(1:1) Take Profit: " + str.tostring(tp1Price), tpLineColor, tpLabelColor, true)
drawLine(tp2Price, "(2:1) Take Profit: " + str.tostring(tp2Price), tpLineColor, tpLabelColor, true)
drawLine(tp3Price, "(3:1) Take Profit: " + str.tostring(tp3Price), tpLineColor, tpLabelColor, true)
// === Bollinger Bands Inputs ===
bb_length = input.int(20, title="SMA & StdDev Length")
src = input.source(close, title="Source")
// === Bollinger Band Colors ===
color_upper_2_3 = input.color(color.new(#0db107, 64), title="Upper Band 2–3 Color")
color_upper_3_4 = input.color(color.new(#05c41f, 58), title="Upper Band 3–4 Color")
color_lower_2_3 = input.color(color.new(#bdbc9d, 80), title="Lower Band 2–3 Color")
color_lower_3_4 = input.color(color.new(#e9e6bf, 63), title="Lower Band 3–4 Color")
// === Bollinger Band Calculations ===
sma = ta.sma(src, bb_length)
stdev = ta.stdev(src, bb_length)
bb2_upper = sma + 2 * stdev
bb2_lower = sma - 2 * stdev
bb3_upper = sma + 3 * stdev
bb3_lower = sma - 3 * stdev
bb4_upper = sma + 4 * stdev
bb4_lower = sma - 4 * stdev
// === Hidden Plots for Fill ===
p_bb2_upper = plot(bb2_upper, color=na)
p_bb3_upper = plot(bb3_upper, color=na)
p_bb4_upper = plot(bb4_upper, color=na)
p_bb2_lower = plot(bb2_lower, color=na)
p_bb3_lower = plot(bb3_lower, color=na)
p_bb4_lower = plot(bb4_lower, color=na)
// === Band Zone Fills ===
fill(p_bb2_upper, p_bb3_upper, color=color_upper_2_3)
fill(p_bb3_upper, p_bb4_upper, color=color_upper_3_4)
fill(p_bb2_lower, p_bb3_lower, color=color_lower_2_3)
fill(p_bb3_lower, p_bb4_lower, color=color_lower_3_4)
//SMc
BULLISH_LEG = 1
BEARISH_LEG = 0
BULLISH = +1
BEARISH = -1
GREEN = #9c9c9c
RED = #9c9c9c
BLUE = #9c9c9c
GRAY = #ffffff
MONO_BULLISH = #b2b5be
MONO_BEARISH = #5d606b
HISTORICAL = 'Historical'
PRESENT = 'Present'
COLORED = 'Colored'
MONOCHROME = 'Monochrome'
ALL = 'All'
BOS = 'BOS'
CHOCH = 'CHoCH'
TINY = size.tiny
SMALL = size.small
NORMAL = size.normal
ATR = 'Atr'
RANGE = 'Cumulative Mean Range'
CLOSE = 'Close'
HIGHLOW = 'High/Low'
SOLID = '⎯⎯⎯'
DASHED = '----'
DOTTED = '····'
SMART_GROUP = 'Smart Money Concepts'
INTERNAL_GROUP = 'Real Time Internal Structure'
SWING_GROUP = 'Real Time Swing Structure'
BLOCKS_GROUP = 'Order Blocks'
EQUAL_GROUP = 'EQH/EQL'
GAPS_GROUP = 'Fair Value Gaps'
LEVELS_GROUP = 'Highs & Lows MTF'
ZONES_GROUP = 'Premium & Discount Zones'
modeTooltip = 'Allows to display historical Structure or only the recent ones'
styleTooltip = 'Indicator color theme'
showTrendTooltip = 'Display additional candles with a color reflecting the current trend detected by structure'
showInternalsTooltip = 'Display internal market structure'
internalFilterConfluenceTooltip = 'Filter non significant internal structure breakouts'
showStructureTooltip = 'Display swing market Structure'
showSwingsTooltip = 'Display swing point as labels on the chart'
showHighLowSwingsTooltip = 'Highlight most recent strong and weak high/low points on the chart'
showInternalOrderBlocksTooltip = 'Display internal order blocks on the chart\n\nNumber of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart\n\nNumber of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks \n\nIt is recommended to use the cumulative mean range method when a low amount of data is available'
orderBlockMitigationTooltip = 'Select what values to use for order block mitigation'
showEqualHighsLowsTooltip = 'Display equal highs and equal lows on the chart'
equalHighsLowsLengthTooltip = 'Number of bars used to confirm equal highs and equal lows'
equalHighsLowsThresholdTooltip = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results'
showFairValueGapsTooltip = 'Display fair values gaps on the chart'
fairValueGapsThresholdTooltip = 'Filter out non significant fair value gaps'
fairValueGapsTimeframeTooltip = 'Fair value gaps timeframe'
fairValueGapsExtendTooltip = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
showPremiumDiscountZonesTooltip = 'Display premium, discount, and equilibrium zones on chart'
modeInput = input.string( HISTORICAL, 'Mode', group = SMART_GROUP, tooltip = modeTooltip, options = )
styleInput = input.string( COLORED, 'Style', group = SMART_GROUP, tooltip = styleTooltip,options = )
showTrendInput = input( false, 'Color Candles', group = SMART_GROUP, tooltip = showTrendTooltip)
showInternalsInput = input( true, 'Show Internal Structure', group = INTERNAL_GROUP, tooltip = showInternalsTooltip)
showInternalBullInput = input.string( ALL, 'Bullish Structure', group = INTERNAL_GROUP, inline = 'ibull', options = )
internalBullColorInput = input( GREEN, '', group = INTERNAL_GROUP, inline = 'ibull')
showInternalBearInput = input.string( ALL, 'Bearish Structure' , group = INTERNAL_GROUP, inline = 'ibear', options = )
internalBearColorInput = input( RED, '', group = INTERNAL_GROUP, inline = 'ibear')
internalFilterConfluenceInput = input( false, 'Confluence Filter', group = INTERNAL_GROUP, tooltip = internalFilterConfluenceTooltip)
internalStructureSize = input.string( TINY, 'Internal Label Size', group = INTERNAL_GROUP, options = )
showStructureInput = input( true, 'Show Swing Structure', group = SWING_GROUP, tooltip = showStructureTooltip)
showSwingBullInput = input.string( ALL, 'Bullish Structure', group = SWING_GROUP, inline = 'bull', options = )
swingBullColorInput = input( GREEN, '', group = SWING_GROUP, inline = 'bull')
showSwingBearInput = input.string( ALL, 'Bearish Structure', group = SWING_GROUP, inline = 'bear', options = )
swingBearColorInput = input( RED, '', group = SWING_GROUP, inline = 'bear')
swingStructureSize = input.string( SMALL, 'Swing Label Size', group = SWING_GROUP, options = )
showSwingsInput = input( false, 'Show Swings Points', group = SWING_GROUP, tooltip = showSwingsTooltip,inline = 'swings')
swingsLengthInput = input.int( 50, '', group = SWING_GROUP, minval = 10, inline = 'swings')
showHighLowSwingsInput = input( true, 'Show Strong/Weak High/Low',group = SWING_GROUP, tooltip = showHighLowSwingsTooltip)
showInternalOrderBlocksInput = input( true, 'Internal Order Blocks' , group = BLOCKS_GROUP, tooltip = showInternalOrderBlocksTooltip, inline = 'iob')
internalOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'iob')
showSwingOrderBlocksInput = input( false, 'Swing Order Blocks', group = BLOCKS_GROUP, tooltip = showSwingOrderBlocksTooltip, inline = 'ob')
swingOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'ob')
orderBlockFilterInput = input.string( 'Atr', 'Order Block Filter', group = BLOCKS_GROUP, tooltip = orderBlockFilterTooltip, options = )
orderBlockMitigationInput = input.string( HIGHLOW, 'Order Block Mitigation', group = BLOCKS_GROUP, tooltip = orderBlockMitigationTooltip, options = )
internalBullishOrderBlockColor = input.color(color.new(#808080, 80), 'Internal Bullish OB', group = BLOCKS_GROUP)
internalBearishOrderBlockColor = input.color(color.new(#808080, 80), 'Internal Bearish OB', group = BLOCKS_GROUP)
swingBullishOrderBlockColor = input.color(color.new(#808080, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#808080, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( true, 'Equal High/Low', group = EQUAL_GROUP, tooltip = showEqualHighsLowsTooltip)
equalHighsLowsLengthInput = input.int( 3, 'Bars Confirmation', group = EQUAL_GROUP, tooltip = equalHighsLowsLengthTooltip, minval = 1)
equalHighsLowsThresholdInput = input.float( 0.1, 'Threshold', group = EQUAL_GROUP, tooltip = equalHighsLowsThresholdTooltip, minval = 0, maxval = 0.5, step = 0.1)
equalHighsLowsSizeInput = input.string( TINY, 'Label Size', group = EQUAL_GROUP, options = )
showFairValueGapsInput = input( false, 'Fair Value Gaps', group = GAPS_GROUP, tooltip = showFairValueGapsTooltip)
fairValueGapsThresholdInput = input( true, 'Auto Threshold', group = GAPS_GROUP, tooltip = fairValueGapsThresholdTooltip)
fairValueGapsTimeframeInput = input.timeframe('', 'Timeframe', group = GAPS_GROUP, tooltip = fairValueGapsTimeframeTooltip)
fairValueGapsBullColorInput = input.color(color.new(#00ff68, 70), 'Bullish FVG' , group = GAPS_GROUP)
fairValueGapsBearColorInput = input.color(color.new(#ff0008, 70), 'Bearish FVG' , group = GAPS_GROUP)
fairValueGapsExtendInput = input.int( 1, 'Extend FVG', group = GAPS_GROUP, tooltip = fairValueGapsExtendTooltip, minval = 0)
showDailyLevelsInput = input( false, 'Daily', group = LEVELS_GROUP, inline = 'daily')
dailyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'daily', options = )
dailyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'daily')
showWeeklyLevelsInput = input( false, 'Weekly', group = LEVELS_GROUP, inline = 'weekly')
weeklyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'weekly', options = )
weeklyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'weekly')
showMonthlyLevelsInput = input( false, 'Monthly', group = LEVELS_GROUP, inline = 'monthly')
monthlyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'monthly', options = )
monthlyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'monthly')
showPremiumDiscountZonesInput = input( false, 'Premium/Discount Zones', group = ZONES_GROUP , tooltip = showPremiumDiscountZonesTooltip)
premiumZoneColorInput = input.color( RED, 'Premium Zone', group = ZONES_GROUP)
equilibriumZoneColorInput = input.color( GRAY, 'Equilibrium Zone', group = ZONES_GROUP)
discountZoneColorInput = input.color( GREEN, 'Discount Zone', group = ZONES_GROUP)
//---------------------------------------------------------------------------------------------------------------------}
//DATA STRUCTURES & VARIABLES
//---------------------------------------------------------------------------------------------------------------------{
// @type UDT representing alerts as bool fields
// @field internalBullishBOS internal structure custom alert
// @field internalBearishBOS internal structure custom alert
// @field internalBullishCHoCH internal structure custom alert
// @field internalBearishCHoCH internal structure custom alert
// @field swingBullishBOS swing structure custom alert
// @field swingBearishBOS swing structure custom alert
// @field swingBullishCHoCH swing structure custom alert
// @field swingBearishCHoCH swing structure custom alert
// @field internalBullishOrderBlock internal order block custom alert
// @field internalBearishOrderBlock internal order block custom alert
// @field swingBullishOrderBlock swing order block custom alert
// @field swingBearishOrderBlock swing order block custom alert
// @field equalHighs equal high low custom alert
// @field equalLows equal high low custom alert
// @field bullishFairValueGap fair value gap custom alert
// @field bearishFairValueGap fair value gap custom alert
type alerts
bool internalBullishBOS = false
bool internalBearishBOS = false
bool internalBullishCHoCH = false
bool internalBearishCHoCH = false
bool swingBullishBOS = false
bool swingBearishBOS = false
bool swingBullishCHoCH = false
bool swingBearishCHoCH = false
bool internalBullishOrderBlock = false
bool internalBearishOrderBlock = false
bool swingBullishOrderBlock = false
bool swingBearishOrderBlock = false
bool equalHighs = false
bool equalLows = false
bool bullishFairValueGap = false
bool bearishFairValueGap = false
// @type UDT representing last swing extremes (top & bottom)
// @field top last top swing price
// @field bottom last bottom swing price
// @field barTime last swing bar time
// @field barIndex last swing bar index
// @field lastTopTime last top swing time
// @field lastBottomTime last bottom swing time
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
// @type UDT representing Fair Value Gaps
// @field top top price
// @field bottom bottom price
// @field bias bias (BULLISH or BEARISH)
// @field topBox top box
// @field bottomBox bottom box
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
// @type UDT representing trend bias
// @field bias BULLISH or BEARISH
type trend
int bias
// @type UDT representing Equal Highs Lows display
// @field l_ine displayed line
// @field l_abel displayed label
type equalDisplay
line l_ine = na
label l_abel = na
// @type UDT representing a pivot point (swing point)
// @field currentLevel current price level
// @field lastLevel last price level
// @field crossed true if price level is crossed
// @field barTime bar time
// @field barIndex bar index
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
// @type UDT representing an order block
// @field barHigh bar high
// @field barLow bar low
// @field barTime bar time
// @field bias BULLISH or BEARISH
type orderBlock
float barHigh
float barLow
int barTime
int bias
// @variable current swing pivot high
var pivot swingHigh = pivot.new(na,na,false)
// @variable current swing pivot low
var pivot swingLow = pivot.new(na,na,false)
// @variable current internal pivot high
var pivot internalHigh = pivot.new(na,na,false)
// @variable current internal pivot low
var pivot internalLow = pivot.new(na,na,false)
// @variable current equal high pivot
var pivot equalHigh = pivot.new(na,na,false)
// @variable current equal low pivot
var pivot equalLow = pivot.new(na,na,false)
// @variable swing trend bias
var trend swingTrend = trend.new(0)
// @variable internal trend bias
var trend internalTrend = trend.new(0)
// @variable equal high display
var equalDisplay equalHighDisplay = equalDisplay.new()
// @variable equal low display
var equalDisplay equalLowDisplay = equalDisplay.new()
// @variable storage for fairValueGap UDTs
var array fairValueGaps = array.new()
// @variable storage for parsed highs
var array parsedHighs = array.new()
// @variable storage for parsed lows
var array parsedLows = array.new()
// @variable storage for raw highs
var array highs = array.new()
// @variable storage for raw lows
var array lows = array.new()
// @variable storage for bar time values
var array times = array.new()
// @variable last trailing swing high and low
var trailingExtremes trailing = trailingExtremes.new()
// @variable storage for orderBlock UDTs (swing order blocks)
var array swingOrderBlocks = array.new()
// @variable storage for orderBlock UDTs (internal order blocks)
var array internalOrderBlocks = array.new()
// @variable storage for swing order blocks boxes
var array swingOrderBlocksBoxes = array.new()
// @variable storage for internal order blocks boxes
var array internalOrderBlocksBoxes = array.new()
// @variable color for swing bullish structures
var swingBullishColor = styleInput == MONOCHROME ? MONO_BULLISH : swingBullColorInput
// @variable color for swing bearish structures
var swingBearishColor = styleInput == MONOCHROME ? MONO_BEARISH : swingBearColorInput
// @variable color for bullish fair value gaps
var fairValueGapBullishColor = styleInput == MONOCHROME ? color.new(MONO_BULLISH,70) : fairValueGapsBullColorInput
// @variable color for bearish fair value gaps
var fairValueGapBearishColor = styleInput == MONOCHROME ? color.new(MONO_BEARISH,70) : fairValueGapsBearColorInput
// @variable color for premium zone
var premiumZoneColor = styleInput == MONOCHROME ? MONO_BEARISH : premiumZoneColorInput
// @variable color for discount zone
var discountZoneColor = styleInput == MONOCHROME ? MONO_BULLISH : discountZoneColorInput
// @variable bar index on current script iteration
varip int currentBarIndex = bar_index
// @variable bar index on last script iteration
varip int lastBarIndex = bar_index
// @variable alerts in current bar
alerts currentAlerts = alerts.new()
// @variable time at start of chart
var initialTime = time
// we create the needed boxes for displaying order blocks at the first execution
if barstate.isfirst
if showSwingOrderBlocksInput
for index = 1 to swingOrderBlocksSizeInput
swingOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
if showInternalOrderBlocksInput
for index = 1 to internalOrderBlocksSizeInput
internalOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
// @variable source to use in bearish order blocks mitigation
bearishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : high
// @variable source to use in bullish order blocks mitigation
bullishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : low
// @variable default volatility measure
atrMeasure = ta.atr(200)
// @variable parsed volatility measure by user settings
volatilityMeasure = orderBlockFilterInput == ATR ? atrMeasure : ta.cum(ta.tr)/bar_index
// @variable true if current bar is a high volatility bar
highVolatilityBar = (high - low) >= (2 * volatilityMeasure)
// @variable parsed high
parsedHigh = highVolatilityBar ? low : high
// @variable parsed low
parsedLow = highVolatilityBar ? high : low
// we store current values into the arrays at each bar
parsedHighs.push(parsedHigh)
parsedLows.push(parsedLow)
highs.push(high)
lows.push(low)
times.push(time)
//---------------------------------------------------------------------------------------------------------------------}
//USER-DEFINED FUNCTIONS
//---------------------------------------------------------------------------------------------------------------------{
// @function Get the value of the current leg, it can be 0 (bearish) or 1 (bullish)
// @returns int
leg(int size) =>
var leg = 0
newLegHigh = high > ta.highest( size)
newLegLow = low < ta.lowest( size)
if newLegHigh
leg := BEARISH_LEG
else if newLegLow
leg := BULLISH_LEG
leg
// @function Identify whether the current value is the start of a new leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfNewLeg(int leg) => ta.change(leg) != 0
// @function Identify whether the current level is the start of a new bearish leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfBearishLeg(int leg) => ta.change(leg) == -1
// @function Identify whether the current level is the start of a new bullish leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfBullishLeg(int leg) => ta.change(leg) == +1
// @function create a new label
// @param labelTime bar time coordinate
// @param labelPrice price coordinate
// @param tag text to display
// @param labelColor text color
// @param labelStyle label style
// @returns label ID
drawLabel(int labelTime, float labelPrice, string tag, color labelColor, string labelStyle) =>
var label l_abel = na
if modeInput == PRESENT
l_abel.delete()
l_abel := label.new(chart.point.new(labelTime,na,labelPrice),tag,xloc.bar_time,color=color(na),textcolor=labelColor,style = labelStyle,size = size.small)
// @function create a new line and label representing an EQH or EQL
// @param p_ivot starting pivot
// @param level price level of current pivot
// @param size how many bars ago was the current pivot detected
// @param equalHigh true for EQH, false for EQL
// @returns label ID
drawEqualHighLow(pivot p_ivot, float level, int size, bool equalHigh) =>
equalDisplay e_qualDisplay = equalHigh ? equalHighDisplay : equalLowDisplay
string tag = 'EQL'
color equalColor = swingBullishColor
string labelStyle = label.style_label_up
if equalHigh
tag := 'EQH'
equalColor := swingBearishColor
labelStyle := label.style_label_down
if modeInput == PRESENT
line.delete( e_qualDisplay.l_ine)
label.delete( e_qualDisplay.l_abel)
e_qualDisplay.l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time ,na,level), xloc = xloc.bar_time, color = equalColor, style = line.style_dotted)
labelPosition = math.round(0.5*(p_ivot.barIndex + bar_index - size))
e_qualDisplay.l_abel := label.new(chart.point.new(na,labelPosition,level), tag, xloc.bar_index, color = color(na), textcolor = equalColor, style = labelStyle, size = equalHighsLowsSizeInput)
// @function store current structure and trailing swing points, and also display swing points and equal highs/lows
// @param size (int) structure size
// @param equalHighLow (bool) true for displaying current highs/lows
// @param internal (bool) true for getting internal structures
// @returns label ID
getCurrentStructure(int size,bool equalHighLow = false, bool internal = false) =>
currentLeg = leg(size)
newPivot = startOfNewLeg(currentLeg)
pivotLow = startOfBullishLeg(currentLeg)
pivotHigh = startOfBearishLeg(currentLeg)
if newPivot
if pivotLow
pivot p_ivot = equalHighLow ? equalLow : internal ? internalLow : swingLow
if equalHighLow and math.abs(p_ivot.currentLevel - low ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot, low , size, false)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := low
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.bottom := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastBottomTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel < p_ivot.lastLevel ? 'LL' : 'HL', swingBullishColor, label.style_label_up)
else
pivot p_ivot = equalHighLow ? equalHigh : internal ? internalHigh : swingHigh
if equalHighLow and math.abs(p_ivot.currentLevel - high ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot,high ,size,true)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := high
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.top := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastTopTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel > p_ivot.lastLevel ? 'HH' : 'LH', swingBearishColor, label.style_label_down)
// @function draw line and label representing a structure
// @param p_ivot base pivot point
// @param tag test to display
// @param structureColor base color
// @param lineStyle line style
// @param labelStyle label style
// @param labelSize text size
// @returns label ID
drawStructure(pivot p_ivot, string tag, color structureColor, string lineStyle, string labelStyle, string labelSize) =>
var line l_ine = line.new(na,na,na,na,xloc = xloc.bar_time)
var label l_abel = label.new(na,na)
if modeInput == PRESENT
l_ine.delete()
l_abel.delete()
l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time,na,p_ivot.currentLevel), xloc.bar_time, color=structureColor, style=lineStyle)
l_abel := label.new(chart.point.new(na,math.round(0.5*(p_ivot.barIndex+bar_index)),p_ivot.currentLevel), tag, xloc.bar_index, color=color(na), textcolor=structureColor, style=labelStyle, size = labelSize)
// @function delete order blocks
// @param internal true for internal order blocks
// @returns orderBlock ID
deleteOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
for in orderBlocks
bool crossedOderBlock = false
if bearishOrderBlockMitigationSource > eachOrderBlock.barHigh and eachOrderBlock.bias == BEARISH
crossedOderBlock := true
if internal
currentAlerts.internalBearishOrderBlock := true
else
currentAlerts.swingBearishOrderBlock := true
else if bullishOrderBlockMitigationSource < eachOrderBlock.barLow and eachOrderBlock.bias == BULLISH
crossedOderBlock := true
if internal
currentAlerts.internalBullishOrderBlock := true
else
currentAlerts.swingBullishOrderBlock := true
if crossedOderBlock
orderBlocks.remove(index)
// @function fetch and store order blocks
// @param p_ivot base pivot point
// @param internal true for internal order blocks
// @param bias BULLISH or BEARISH
// @returns void
storeOrdeBlock(pivot p_ivot,bool internal = false,int bias) =>
if (not internal and showSwingOrderBlocksInput) or (internal and showInternalOrderBlocksInput)
array a_rray = na
int parsedIndex = na
if bias == BEARISH
a_rray := parsedHighs.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.max())
else
a_rray := parsedLows.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.min())
orderBlock o_rderBlock = orderBlock.new(parsedHighs.get(parsedIndex), parsedLows.get(parsedIndex), times.get(parsedIndex),bias)
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
if orderBlocks.size() >= 100
orderBlocks.pop()
orderBlocks.unshift(o_rderBlock)
// @function draw order blocks as boxes
// @param internal true for internal order blocks
// @returns void
drawOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
orderBlocksSize = orderBlocks.size()
if orderBlocksSize > 0
maxOrderBlocks = internal ? internalOrderBlocksSizeInput : swingOrderBlocksSizeInput
array parsedOrdeBlocks = orderBlocks.slice(0, math.min(maxOrderBlocks,orderBlocksSize))
array b_oxes = internal ? internalOrderBlocksBoxes : swingOrderBlocksBoxes
for in parsedOrdeBlocks
orderBlockColor = styleInput == MONOCHROME ? (eachOrderBlock.bias == BEARISH ? color.new(MONO_BEARISH,80) : color.new(MONO_BULLISH,80)) : internal ? (eachOrderBlock.bias == BEARISH ? internalBearishOrderBlockColor : internalBullishOrderBlockColor) : (eachOrderBlock.bias == BEARISH ? swingBearishOrderBlockColor : swingBullishOrderBlockColor)
box b_ox = b_oxes.get(index)
b_ox.set_top_left_point( chart.point.new(eachOrderBlock.barTime,na,eachOrderBlock.barHigh))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,eachOrderBlock.barLow))
b_ox.set_border_color( internal ? na : orderBlockColor)
b_ox.set_bgcolor( orderBlockColor)
// @function detect and draw structures, also detect and store order blocks
// @param internal true for internal structures or order blocks
// @returns void
displayStructure(bool internal = false) =>
var bullishBar = true
var bearishBar = true
if internalFilterConfluenceInput
bullishBar := high - math.max(close, open) > math.min(close, open - low)
bearishBar := high - math.max(close, open) < math.min(close, open - low)
pivot p_ivot = internal ? internalHigh : swingHigh
trend t_rend = internal ? internalTrend : swingTrend
lineStyle = internal ? line.style_dashed : line.style_solid
labelSize = internal ? internalStructureSize : swingStructureSize
extraCondition = internal ? internalHigh.currentLevel != swingHigh.currentLevel and bullishBar : true
bullishColor = styleInput == MONOCHROME ? MONO_BULLISH : internal ? internalBullColorInput : swingBullColorInput
if ta.crossover(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BEARISH ? CHOCH : BOS
if internal
currentAlerts.internalBullishCHoCH := tag == CHOCH
currentAlerts.internalBullishBOS := tag == BOS
else
currentAlerts.swingBullishCHoCH := tag == CHOCH
currentAlerts.swingBullishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BULLISH
displayCondition = internal ? showInternalsInput and (showInternalBullInput == ALL or (showInternalBullInput == BOS and tag != CHOCH) or (showInternalBullInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBullInput == ALL or (showSwingBullInput == BOS and tag != CHOCH) or (showSwingBullInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bullishColor,lineStyle,label.style_label_down,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BULLISH)
p_ivot := internal ? internalLow : swingLow
extraCondition := internal ? internalLow.currentLevel != swingLow.currentLevel and bearishBar : true
bearishColor = styleInput == MONOCHROME ? MONO_BEARISH : internal ? internalBearColorInput : swingBearColorInput
if ta.crossunder(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BULLISH ? CHOCH : BOS
if internal
currentAlerts.internalBearishCHoCH := tag == CHOCH
currentAlerts.internalBearishBOS := tag == BOS
else
currentAlerts.swingBearishCHoCH := tag == CHOCH
currentAlerts.swingBearishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BEARISH
displayCondition = internal ? showInternalsInput and (showInternalBearInput == ALL or (showInternalBearInput == BOS and tag != CHOCH) or (showInternalBearInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBearInput == ALL or (showSwingBearInput == BOS and tag != CHOCH) or (showSwingBearInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bearishColor,lineStyle,label.style_label_up,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BEARISH)
// @function draw one fair value gap box (each fair value gap has two boxes)
// @param leftTime left time coordinate
// @param rightTime right time coordinate
// @param topPrice top price level
// @param bottomPrice bottom price level
// @param boxColor box color
// @returns box ID
fairValueGapBox(leftTime,rightTime,topPrice,bottomPrice,boxColor) => box.new(chart.point.new(leftTime,na,topPrice),chart.point.new(rightTime + fairValueGapsExtendInput * (time-time ),na,bottomPrice), xloc=xloc.bar_time, border_color = boxColor, bgcolor = boxColor)
// @function delete fair value gaps
// @returns fairValueGap ID
deleteFairValueGaps() =>
for in fairValueGaps
if (low < eachFairValueGap.bottom and eachFairValueGap.bias == BULLISH) or (high > eachFairValueGap.top and eachFairValueGap.bias == BEARISH)
eachFairValueGap.topBox.delete()
eachFairValueGap.bottomBox.delete()
fairValueGaps.remove(index)
// @function draw fair value gaps
// @returns fairValueGap ID
drawFairValueGaps() =>
= request.security(syminfo.tickerid, fairValueGapsTimeframeInput, [close , open , time , high , low , time , high , low ],lookahead = barmerge.lookahead_on)
barDeltaPercent = (lastClose - lastOpen) / (lastOpen * 100)
newTimeframe = timeframe.change(fairValueGapsTimeframeInput)
threshold = fairValueGapsThresholdInput ? ta.cum(math.abs(newTimeframe ? barDeltaPercent : 0)) / bar_index * 2 : 0
bullishFairValueGap = currentLow > last2High and lastClose > last2High and barDeltaPercent > threshold and newTimeframe
bearishFairValueGap = currentHigh < last2Low and lastClose < last2Low and -barDeltaPercent > threshold and newTimeframe
if bullishFairValueGap
currentAlerts.bullishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentLow,last2High,BULLISH,fairValueGapBox(lastTime,currentTime,currentLow,math.avg(currentLow,last2High),fairValueGapBullishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentLow,last2High),last2High,fairValueGapBullishColor)))
if bearishFairValueGap
currentAlerts.bearishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentHigh,last2Low,BEARISH,fairValueGapBox(lastTime,currentTime,currentHigh,math.avg(currentHigh,last2Low),fairValueGapBearishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentHigh,last2Low),last2Low,fairValueGapBearishColor)))
// @function get line style from string
// @param style line style
// @returns string
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
// @function draw MultiTimeFrame levels
// @param timeframe base timeframe
// @param sameTimeframe true if chart timeframe is same as base timeframe
// @param style line style
// @param levelColor line and text color
// @returns void
drawLevels(string timeframe, bool sameTimeframe, string style, color levelColor) =>
= request.security(syminfo.tickerid, timeframe, [high , low , time , time],lookahead = barmerge.lookahead_on)
float parsedTop = sameTimeframe ? high : topLevel
float parsedBottom = sameTimeframe ? low : bottomLevel
int parsedLeftTime = sameTimeframe ? time : leftTime
int parsedRightTime = sameTimeframe ? time : rightTime
int parsedTopTime = time
int parsedBottomTime = time
if not sameTimeframe
int leftIndex = times.binary_search_rightmost(parsedLeftTime)
int rightIndex = times.binary_search_rightmost(parsedRightTime)
array timeArray = times.slice(leftIndex,rightIndex)
array topArray = highs.slice(leftIndex,rightIndex)
array bottomArray = lows.slice(leftIndex,rightIndex)
parsedTopTime := timeArray.size() > 0 ? timeArray.get(topArray.indexof(topArray.max())) : initialTime
parsedBottomTime := timeArray.size() > 0 ? timeArray.get(bottomArray.indexof(bottomArray.min())) : initialTime
var line topLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var line bottomLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var label topLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}H',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
var label bottomLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}L',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
topLine.set_first_point( chart.point.new(parsedTopTime,na,parsedTop))
topLine.set_second_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
topLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
bottomLine.set_first_point( chart.point.new(parsedBottomTime,na,parsedBottom))
bottomLine.set_second_point(chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
bottomLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
// @function true if chart timeframe is higher than provided timeframe
// @param timeframe timeframe to check
// @returns bool
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
// @function update trailing swing points
// @returns int
updateTrailingExtremes() =>
trailing.top := math.max(high,trailing.top)
trailing.lastTopTime := trailing.top == high ? time : trailing.lastTopTime
trailing.bottom := math.min(low,trailing.bottom)
trailing.lastBottomTime := trailing.bottom == low ? time : trailing.lastBottomTime
// @function draw trailing swing points
// @returns void
drawHighLowSwings() =>
var line topLine = line.new(na, na, na, na, color = swingBearishColor, xloc = xloc.bar_time)
var line bottomLine = line.new(na, na, na, na, color = swingBullishColor, xloc = xloc.bar_time)
var label topLabel = label.new(na, na, color=color(na), textcolor = swingBearishColor, xloc = xloc.bar_time, style = label.style_label_down, size = size.tiny)
var label bottomLabel = label.new(na, na, color=color(na), textcolor = swingBullishColor, xloc = xloc.bar_time, style = label.style_label_up, size = size.tiny)
rightTimeBar = last_bar_time + 20 * (time - time )
topLine.set_first_point( chart.point.new(trailing.lastTopTime, na, trailing.top))
topLine.set_second_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_text( swingTrend.bias == BEARISH ? 'Strong High' : 'Weak High')
bottomLine.set_first_point( chart.point.new(trailing.lastBottomTime, na, trailing.bottom))
bottomLine.set_second_point(chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_point( chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_text( swingTrend.bias == BULLISH ? 'Strong Low' : 'Weak Low')
// @function draw a zone with a label and a box
// @param labelLevel price level for label
// @param labelIndex bar index for label
// @param top top price level for box
// @param bottom bottom price level for box
// @param tag text to display
// @param zoneColor base color
// @param style label style
// @returns void
drawZone(float labelLevel, int labelIndex, float top, float bottom, string tag, color zoneColor, string style) =>
var label l_abel = label.new(na,na,text = tag, color=color(na),textcolor = zoneColor, style = style, size = size.small)
var box b_ox = box.new(na,na,na,na,bgcolor = color.new(zoneColor,80),border_color = color(na), xloc = xloc.bar_time)
b_ox.set_top_left_point( chart.point.new(trailing.barTime,na,top))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,bottom))
l_abel.set_point( chart.point.new(na,labelIndex,labelLevel))
// @function draw premium/discount zones
// @returns void
drawPremiumDiscountZones() =>
drawZone(trailing.top, math.round(0.5*(trailing.barIndex + last_bar_index)), trailing.top, 0.95*trailing.top + 0.05*trailing.bottom, 'Premium', premiumZoneColor, label.style_label_down)
equilibriumLevel = math.avg(trailing.top, trailing.bottom)
drawZone(equilibriumLevel, last_bar_index, 0.525*trailing.top + 0.475*trailing.bottom, 0.525*trailing.bottom + 0.475*trailing.top, 'Equilibrium', equilibriumZoneColorInput, label.style_label_left)
drawZone(trailing.bottom, math.round(0.5*(trailing.barIndex + last_bar_index)), 0.95*trailing.bottom + 0.05*trailing.top, trailing.bottom, 'Discount', discountZoneColor, label.style_label_up)
//---------------------------------------------------------------------------------------------------------------------}
//MUTABLE VARIABLES & EXECUTION
//---------------------------------------------------------------------------------------------------------------------{
parsedOpen = showTrendInput ? open : na
candleColor = internalTrend.bias == BULLISH ? swingBullishColor : swingBearishColor
plotcandle(parsedOpen,high,low,close,color = candleColor, wickcolor = candleColor, bordercolor = candleColor)
if showHighLowSwingsInput or showPremiumDiscountZonesInput
updateTrailingExtremes()
if showHighLowSwingsInput
drawHighLowSwings()
if showPremiumDiscountZonesInput
drawPremiumDiscountZones()
if showFairValueGapsInput
deleteFairValueGaps()
getCurrentStructure(swingsLengthInput,false)
getCurrentStructure(5,false,true)
if showEqualHighsLowsInput
getCurrentStructure(equalHighsLowsLengthInput,true)
if showInternalsInput or showInternalOrderBlocksInput or showTrendInput
displayStructure(true)
if showStructureInput or showSwingOrderBlocksInput or showHighLowSwingsInput
displayStructure()
if showInternalOrderBlocksInput
deleteOrderBlocks(true)
if showSwingOrderBlocksInput
deleteOrderBlocks()
if showFairValueGapsInput
drawFairValueGaps()
if barstate.islastconfirmedhistory or barstate.islast
if showInternalOrderBlocksInput
drawOrderBlocks(true)
if showSwingOrderBlocksInput
drawOrderBlocks()
lastBarIndex := currentBarIndex
currentBarIndex := bar_index
newBar = currentBarIndex != lastBarIndex
if barstate.islastconfirmedhistory or (barstate.isrealtime and newBar)
if showDailyLevelsInput and not higherTimeframe('D')
drawLevels('D',timeframe.isdaily,dailyLevelsStyleInput,dailyLevelsColorInput)
if showWeeklyLevelsInput and not higherTimeframe('W')
drawLevels('W',timeframe.isweekly,weeklyLevelsStyleInput,weeklyLevelsColorInput)
if showMonthlyLevelsInput and not higherTimeframe('M')
drawLevels('M',timeframe.ismonthly,monthlyLevelsStyleInput,monthlyLevelsColorInput)
//---------------------------------------------------------------------------------------------------------------------}
//ALERTS
//---------------------------------------------------------------------------------------------------------------------{
alertcondition(currentAlerts.internalBullishBOS, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.internalBullishCHoCH, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.internalBearishBOS, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(currentAlerts.internalBearishCHoCH, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
alertcondition(currentAlerts.swingBullishBOS, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.swingBullishCHoCH, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.swingBearishBOS, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(currentAlerts.swingBearishCHoCH, 'Bearish CHoCH', 'Bearish CHoCH formed')
alertcondition(currentAlerts.internalBullishOrderBlock, 'Bullish Internal OB Breakout', 'Price broke bullish internal OB')
alertcondition(currentAlerts.internalBearishOrderBlock, 'Bearish Internal OB Breakout', 'Price broke bearish internal OB')
alertcondition(currentAlerts.swingBullishOrderBlock, 'Bullish Swing OB Breakout', 'Price broke bullish swing OB')
alertcondition(currentAlerts.swingBearishOrderBlock, 'Bearish Swing OB Breakout', 'Price broke bearish swing OB')
alertcondition(currentAlerts.equalHighs, 'Equal Highs', 'Equal highs detected')
alertcondition(currentAlerts.equalLows, 'Equal Lows', 'Equal lows detected')
alertcondition(currentAlerts.bullishFairValueGap, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(currentAlerts.bearishFairValueGap, 'Bearish FVG', 'Bearish FVG formed')
//---------------------------------------------------------------------------------------------------------------------}
Trend Line Breakout StrategyThe Trend Line Breakout Strategy is a sophisticated, automated trading system built in Pine Script v6 for TradingView, designed to capture high-probability reversals by detecting breakouts from dynamic trend lines. It focuses on establishing clear directional bias through higher timeframe (HTF) trend analysis while executing precise entries on the chart's native timeframe (typically lower, such as 15-60 minutes for intraday trading).
Key Components:
Trend Line Construction: Green Uptrend Lines (Support): Automatically drawn by connecting the two most recent pivot lows, but only if the line slopes upward (positive slope). This ensures the line truly represents bullish support.
Red Downtrend Lines (Resistance): Drawn by connecting the two most recent pivot highs, but only if the line slopes downward (negative slope), confirming bearish resistance.
Pivot points are detected using a user-defined lookback period (default: 5 bars left and right), filtering out invalid lines to reduce noise.
HTF Trend Filter:
Uses a 20-period EMA crossover against a 50-period EMA on a user-selected higher timeframe (e.g., 4H or Daily) to determine overall market direction. Long trades require an uptrend (20 EMA > 50 EMA), and shorts require a downtrend. This aligns entries with the broader momentum, reducing whipsaws.
Entry Signals:Buy (Long) Signal:
Triggered when price breaks above a red downtrend line with two consecutive confirmation candles (each closing above the line with bullish momentum, i.e., close > open). Must align with HTF uptrend.
Sell (Short) Signal: Triggered when price breaks below a green uptrend line with two consecutive confirmation candles (each closing below the line with bearish momentum, i.e., close < open). Must align with HTF downtrend.
This "2-candle confirmation" rule ensures momentum shift, avoiding false breaks.
Risk Management:Position Sizing:
Risks a fixed percentage of equity (default: 1%) per trade.
Stop Loss: Optional ATR-based (14-period default) or fixed 1% of price, placed beyond the breakout candle's extreme.
Take Profit: Set at a user-defined risk-reward ratio (default: 2:1), scaling rewards relative to the stop distance.
No pyramiding or trailing stops in the base version, keeping it simple and robust.
Visual Aids:
Plots green/red trend lines on the chart.
Triangle shapes mark entry signals (up for buys, down for sells).
Background shading highlights HTF trend (light green for up, light red for down).
Dashed lines show active stop-loss and take-profit levels.
This strategy excels in trending markets like forex pairs (e.g., EUR/USD) or volatile assets (e.g., BTC/USD), where trend lines hold multiple touches before breaking. It avoids overtrading by requiring slope validation and HTF alignment, aiming for 40-60% win rates with favorable risk-reward to compound returns. Backtesting on historical data (e.g., 2020-2025) typically shows drawdowns under 15% with positive expectancy, but always forward-test on a demo account due to slippage and commissions.Example: Best Possible Settings for Highest ReturnBased on extensive backtesting across various assets and timeframes (using TradingView's Strategy Tester on historical data from January 2020 to September 2025), the optimal settings for maximizing net profit (highest return) were found on the EUR/USD pair using a 1-hour chart. This configuration yielded a simulated return of approximately 285% over the period (with a 52% win rate, profit factor of 2.8, and max drawdown of 12%), outperforming defaults by focusing on longer-term trends and higher rewards.
Higher Timeframe
"D" (Daily)
Captures major institutional trends for fewer but higher-quality signals; reduces noise compared to 4H.
Lower Timeframe
"60" (1H)
Balances intraday precision with trend reliability; ideal for swing trades lasting 1-3 days.
Pivot Lookback Period
10
Longer lookback identifies more significant pivots, improving trend line validity in volatile forex markets.
Min Trendline Touch Points
2 (default)
Sufficient for confirmation without over-filtering; higher values reduce signals excessively.
Risk % of Equity
1.0 (default)
Conservative sizing preserves capital during drawdowns; scaling up increases returns but volatility.
Profit Target (R:R)
3.0
1:3 ratio allows profitability with ~33% win rate; backtests showed it maximizes expectancy in breakouts.
Use ATR for Stop Loss?
true (default)
ATR adapts to volatility, preventing premature stops in choppy conditions.
Backtest Summary (EUR/USD, 1H, 2020-2025):Total Trades: 156
Winning Trades: 81 (52%)
Avg. Win: +1.8% | Avg. Loss: -0.6%
Net Profit: +285% (compounded)
Sharpe Ratio: 1.65
Apply these on a demo first, as live results may vary with spreads (~0.5 pips on EUR/USD). For other assets like BTC/USD, increase pivot lookback to 15 for better noise filtering.
Hilly's Advanced Crypto Scalping Strategy - 5 Min ChartTo determine the "best" input parameters for the Advanced Crypto Scalping Strategy on a 5-minute chart, we need to consider the goals of optimizing for profitability, minimizing false signals, and adapting to the volatile nature of cryptocurrencies. The default parameters in the script are a starting point, but the optimal values depend on the specific cryptocurrency pair, market conditions, and your risk tolerance. Below, I'll provide recommended input values based on common practices in crypto scalping, along with reasoning for each parameter. I’ll also suggest how to fine-tune them using TradingView’s backtesting and optimization tools.
Recommended Input Parameters
These values are tailored for a 5-minute chart for liquid cryptocurrencies like BTC/USD or ETH/USD on exchanges like Binance or Coinbase. They aim to balance signal frequency and accuracy for day trading.
Fast EMA Length (emaFastLen): 9
Reasoning: A 9-period EMA is commonly used in scalping to capture short-term price movements while remaining sensitive to recent price action. It reacts faster than the default 10, aligning with the 5-minute timeframe.
Slow EMA Length (emaSlowLen): 21
Reasoning: A 21-period EMA provides a good balance for identifying the broader trend on a 5-minute chart. It’s slightly longer than the default 20 to reduce noise while confirming the trend direction.
RSI Length (rsiLen): 14
Reasoning: The default 14-period RSI is a standard choice for momentum analysis. It works well for detecting overbought/oversold conditions without being too sensitive on short timeframes.
RSI Overbought (rsiOverbought): 75
Reasoning: Raising the overbought threshold to 75 (from 70) reduces false sell signals in strong bullish trends, which are common in crypto markets.
RSI Oversold (rsiOversold): 25
Reasoning: Lowering the oversold threshold to 25 (from 30) filters out weaker buy signals, ensuring entries occur during stronger reversals.
MACD Fast Length (macdFast): 12
Reasoning: The default 12-period fast EMA for MACD is effective for capturing short-term momentum shifts in crypto, aligning with scalping goals.
MACD Slow Length (macdSlow): 26
Reasoning: The default 26-period slow EMA is a standard setting that works well for confirming momentum trends without lagging too much.
MACD Signal Smoothing (macdSignal): 9
Reasoning: The default 9-period signal line is widely used and provides a good balance for smoothing MACD crossovers on a 5-minute chart.
Bollinger Bands Length (bbLen): 20
Reasoning: The default 20-period Bollinger Bands are effective for identifying volatility breakouts, which are key for scalping in crypto markets.
Bollinger Bands Multiplier (bbMult): 2.0
Reasoning: A 2.0 multiplier is standard and captures most price action within the bands. Increasing it to 2.5 could reduce signals but improve accuracy in highly volatile markets.
Stop Loss % (slPerc): 0.8%
Reasoning: A tighter stop loss of 0.8% (from 1.0%) suits the high volatility of crypto, helping to limit losses on false breakouts while keeping risk manageable.
Take Profit % (tpPerc): 1.5%
Reasoning: A 1.5% take-profit target (from 2.0%) aligns with scalping’s goal of capturing small, frequent gains. Crypto markets often see quick reversals, so a smaller target increases the likelihood of hitting profits.
Use Candlestick Patterns (useCandlePatterns): True
Reasoning: Enabling candlestick patterns (e.g., engulfing, hammer) adds confirmation to signals, reducing false entries in choppy markets.
Use Volume Filter (useVolumeFilter): True
Reasoning: The volume filter ensures signals occur during high-volume breakouts, which are more likely to sustain in crypto markets.
Signal Arrow Size (signalSize): 2.0
Reasoning: Increasing the arrow size to 2.0 (from 1.5) makes buy/sell signals more visible on the chart, especially on smaller screens or volatile price action.
Background Highlight Transparency (bgTransparency): 85
Reasoning: A slightly higher transparency (85 from 80) keeps the background highlights subtle but visible, avoiding chart clutter.
How to Apply These Parameters
Copy the Script: Use the Pine Script provided in the previous response.
Paste in TradingView: Open TradingView, go to the Pine Editor, paste the code, and click "Add to Chart."
Set Parameters: In the strategy settings, manually input the recommended values above or adjust them via the input fields.
Test on a 5-Minute Chart: Apply the strategy to a liquid crypto pair (e.g., BTC/USDT, ETH/USDT) on a 5-minute chart.
Fine-Tuning for Optimal Performance
To find the absolute best parameters for your specific trading pair and market conditions, use TradingView’s Strategy Tester and optimization features:
Backtesting:
Run the strategy on historical data for your chosen pair (e.g., BTC/USDT on Binance).
Check metrics like Net Profit, Profit Factor, Win Rate, and Max Drawdown in the Strategy Tester.
Focus on a sample period of at least 1–3 months to capture various market conditions (bull, bear, sideways).
Parameter Optimization:
In the Strategy Tester, click the settings gear next to the strategy name.
Enable optimization for key inputs like emaFastLen (test range: 7–12), emaSlowLen (15–25), slPerc (0.5–1.5), and tpPerc (1.0–3.0).
Run the optimization to find the combination with the highest net profit or best Sharpe ratio, but avoid over-optimization (curve-fitting) by testing on out-of-sample data.
Market-Specific Adjustments:
Volatile Pairs (e.g., DOGE/USDT): Use tighter stop losses (e.g., 0.5–0.7%) and smaller take-profit targets (e.g., 1.0–1.2%) to account for rapid price swings.
Stable Pairs (e.g., BTC/USDT): Slightly wider stop losses (e.g., 1.0–1.2%) and take-profit targets (e.g., 1.8–2.5%) may work better.
Trending Markets: Increase emaSlowLen (e.g., to 25–30) to follow stronger trends.
Choppy Markets: Tighten bbMult (e.g., to 1.8) and lower rsiOverbought/rsiOversold (e.g., to 70/30) to filter noise.
Forward Testing:
After backtesting, run the strategy in real-time on a demo account for 1–2 weeks to validate performance under current market conditions.
Important Notes
No Universal "Best" Numbers: Optimal parameters vary by crypto pair, exchange, and market conditions (e.g., bull vs. bear market). The suggested values are a starting point based on common scalping practices.
Risk Management: Never risk more than 1–2% of your account per trade. Adjust position sizing in TradingView’s strategy settings to align with your risk tolerance.
Market Volatility: Crypto markets are highly volatile. Test the strategy on your specific pair and adjust parameters if signals are too frequent or too rare.
Not Financial Advice: This is an educational tool. Backtest thoroughly and use a demo account before trading with real funds.
If you want me to generate a chart showing backtest performance for specific parameters or to tweak the script further (e.g., adding more indicators or adjusting signal logic), let me know!can you add clear buy ans sell signs above the candles in this codeTo add clear buy and sell signals above the candles in the provided Pine Script, I'll modify the existing code to include prominent text labels directly above (for sell signals) and below (for buy signals) the candles. These labels will be larger, color-coded, and positioned to avoid clutter, ensuring they are easily visible on the chart. The core strategy logic (EMA, RSI, MACD, Bollinger Bands, candlestick patterns, and volume filter) will remain unchanged, and I'll reuse the same artifact_id since this is an update to the previous script.AdvancedCryptoScalpingStrategy.pinex-pine
TrendMaster Pro with Dynamic ATROverview
TrendMaster Pro with Dynamic ATR is a comprehensive trend-following indicator designed for traders seeking to identify entry and exit points in trending markets while incorporating volatility-based risk management. Built on a multi-timeframe Exponential Moving Average (EMA) system, it combines short-term momentum signals with long-term trend filters, enhanced by a Volatility-Adjusted Moving Average (VMA) for confirmation and Average True Range (ATR) for adaptive stop-loss and take-profit levels.
This indicator overlays directly on your chart, providing visual cues for buy/sell signals, dynamic stops/targets, and optional EMA lines. It's ideal for swing trading, day trading, or scalping across various assets like stocks, forex, cryptocurrencies, and commodities. The system emphasizes trend alignment to reduce false signals, with customizable options for trailing mechanisms and filters to suit different market conditions.
Key benefits:
Multi-Timeframe Analysis: Incorporates higher timeframe EMAs for robust trend detection without needing to switch charts.
Volatility Adaptation: Uses ATR for dynamic positioning of stops and targets, helping manage risk in volatile environments.
Flexible Customization: Toggles for displaying EMAs, using trailing stops/targets, and applying VMA filters for entries/exits.
Alert Integration: Built-in alerts for entries, exits, stop breaches, and target hits to automate notifications.
Core Components
The indicator revolves around four EMAs, a VMA, and ATR calculations:
Exponential Moving Averages (EMAs):
Fast EMA (Default: 12 periods): Captures short-term momentum and quick price changes.
Slow EMA (Default: 27 periods): Identifies medium-term trends, providing a smoother view than the Fast EMA.
Stop EMA (Default: 48 periods on 15-minute timeframe): Acts as dynamic support/resistance for risk management and exit signals.
Trend EMA (Default: 288 periods on 5-minute timeframe): Serves as a long-term trend filter to ensure trades align with the overall market direction.
Volatility-Adjusted Moving Average (VMA):
A dynamic moving average that adjusts its sensitivity based on market volatility (using a Directional Movement Index-inspired calculation).
Length: Default 6 periods.
Colored green (uptrend), red (downtrend), or blue (neutral/sideways).
Optionally filters entries and exits to confirm trend direction.
Average True Range (ATR):
Measures volatility over a specified period (Default: 14).
Used to set adaptive stop-loss and take-profit levels.
Multipliers allow customization: Stop (Default: 1.5x ATR), Fixed Target (Default: 3.0x ATR), Trailing Target (Default: 2.0x ATR).
Supports trailing options for stops (based on highest/lowest since entry) and targets (ratcheting with price movement).
Signal Generation
Entry Signals
Buy (Long) Signal: Triggered when the price is above the Trend EMA (bullish alignment) and one of the following occurs:
Price crosses above the Trend EMA.
Price crosses above the Fast EMA, with Fast EMA > Slow EMA > Trend EMA.
Price crosses above the Slow EMA, with Fast EMA > Slow EMA > Trend EMA.
Filtered optionally by VMA being green (uptrend confirmation).
Visual: Green "BUY" label below the bar.
Sell (Short) Signal: Triggered when the price is below the Trend EMA (bearish alignment) and one of the following occurs:
Price crosses below the Trend EMA.
Price crosses below the Fast EMA, with Fast EMA < Slow EMA < Trend EMA.
Price crosses below the Slow EMA, with Fast EMA < Slow EMA < Trend EMA.
Filtered optionally by VMA being red (downtrend confirmation).
Visual: Red "SELL" label above the bar.
Exit Signals
Exit Long: Occurs when the position is active and:
Price crosses below the Stop EMA, or
Price hits the ATR stop-loss (fixed or trailing), or
Price reaches the ATR take-profit (fixed or trailing).
Filtered optionally by VMA > Stop EMA and VMA red (downtrend shift).
Visual: Green "E" label (exit) or "TP" label (if target hit).
Exit Short: Occurs when the position is active and:
Price crosses above the Stop EMA, or
Price hits the ATR stop-loss (fixed or trailing), or
Price reaches the ATR take-profit (fixed or trailing).
Filtered optionally by VMA < Stop EMA and VMA green (uptrend shift).
Visual: Red "E" label (exit) or "TP" label (if target hit).
The indicator tracks only one active position at a time (long or short), resetting on exit. Trailing stops update based on the highest high (long) or lowest low (short) since entry.
Visual Elements
How to Use ?
Setup: Add to your chart and adjust inputs based on your timeframe (e.g., shorter lengths for intraday, longer for swings).
Trading Strategy:
Enter on "BUY" or "SELL" labels when aligned with your broader analysis.
Monitor ATR lines for risk/reward: Aim for targets at least 2x stop distance.
Use trailing options in trending markets to lock in profits; fixed in ranging ones.
Combine with volume or other indicators for confirmation.
Risk Management: Always respect ATR stops to limit losses. Position size based on stop distance (e.g., 1-2% account risk).
Backtesting: Test on historical data to optimize parameters for your asset.
Alerts: Set up notifications for signals via TradingView's alert system. Examples:
"BUY signal triggered"
"EXIT long trade"
"Long ATR target reached on close"
Notes and Limitations
This is not financial advice; use at your own risk and combine with personal analysis.
Performance varies by market conditions—best in trending environments; may whipsaw in sideways markets.
Multi-timeframe requests may cause slight repainting on live charts due to higher TF data.
No repainting on closed bars, but ensure your chart timeframe is compatible with input TFs.
Licensed under Mozilla Public License 2.0. For questions or feedback, contact @MudraMiner.
This indicator empowers traders with a balanced, adaptive system—happy trading! 🚀
ML Compressor Enhanced Trading Indicator# 🤖 ML Enhanced Trading Indicator - Advanced Market Analysis
## 📊 Overview
This is a comprehensive Machine Learning Enhanced Trading Indicator that combines multiple advanced analytical techniques to provide high-probability trading signals. The indicator uses artificial intelligence, pattern recognition, anomaly detection, and traditional technical analysis to identify optimal entry and exit points in the market.
## 🚀 Key Features
### 🧠 **Machine Learning Core**
- **Advanced Pattern Recognition**: Uses cosine similarity, Pearson correlation, and Spearman rank correlation to identify historical patterns
- **AI-Powered Predictions**: Implements multiple correlation methods to forecast price movements
- **Anomaly Detection**: Z-score based detection system for unusual market activities
- **Signal Confidence Scoring**: Reliability assessment for each trading signal
### 📈 **Technical Analysis Integration**
- **Multi-Timeframe RSI Analysis**: 14 and 21-period RSI with oversold/overbought detection
- **MACD Momentum**: Enhanced MACD histogram analysis for trend confirmation
- **Bollinger Bands Position**: Dynamic position tracking within BB channels
- **Volume Analysis**: Spike and dry volume detection with ratio calculations
- **Trend Strength Measurement**: EMA-based trend power analysis
### 🎯 **Perfect Zone Detection**
- **Ideal Buy Zone**: Identifies perfect buying opportunities when 7 conditions align:
- ML Score ≥ 0.60
- Bottom proximity detection
- RSI in 20-35 range
- Volume spike confirmation
- Positive price anomaly
- Bullish pattern match
- Positive MACD momentum
### 📊 **Comprehensive Display Table**
- **Real-time ML Analysis**: Complete breakdown of all indicators
- **Perfect Buy Conditions Tracker**: Visual checklist with completion percentage
- **Performance Metrics**: Win rate tracking and P&L analysis
- **Signal Strength Indicators**: Confidence levels for each signal
## 🔧 **Customizable Parameters**
### **ML Settings**
- **ML Lookback Period**: 20-500 bars (default: 100)
- **Anomaly Threshold**: 1.0-5.0 sensitivity (default: 2.0)
- **Pattern Similarity**: 0.5-0.99 matching threshold (default: 0.80)
- **AI Lookback Period**: 20-200 bars (default: 50)
### **AI Prediction Models**
- **Correlation Methods**: Spearman, Pearson, Cosine Similarity
- **Forecast Length**: 15-250 bars (default: 50)
- **Similarity Type**: Price or %Change analysis
### **Visual Options**
- **Table Position**: Top/Bottom Left/Right positioning
- **Table Size**: Small, Normal, Large options
- **Signal Display**: Toggle buy/sell signals on/off
- **AI Visualization**: Optional prediction paths and ZigZag
## 📋 **How to Use**
### **For Beginners**
1. Add the indicator to your chart
2. Look for "PERFECT BUY" signals in the table
3. Wait for completion percentage ≥ 85% for highest probability trades
4. Use the background color changes as visual confirmation
### **For Advanced Traders**
1. Analyze individual ML components in the detailed table
2. Monitor anomaly detection for unusual market conditions
3. Use pattern confidence levels for trade timing
4. Combine with your existing strategy for confirmation
### **Signal Interpretation**
- **🟢 PERFECT BUY**: All 7 conditions met - highest probability reversal
- **🟡 NEAR BOTTOM**: Close to ideal conditions - monitor closely
- **🔴 NOT READY**: Wait for better setup
- **Strong Buy/Sell Signals**: ML score-based entries with high confidence
## ⚠️ **Important Notes**
### **Risk Management**
- This indicator provides analysis and signals, not guaranteed outcomes
- Always use proper risk management and position sizing
- Consider market conditions and fundamental factors
- Backtest the strategy on your preferred timeframes and assets
### **Best Practices**
- Use multiple timeframe analysis for confirmation
- Combine with support/resistance levels
- Monitor volume confirmation for all signals
- Set appropriate stop-losses and profit targets
### **Performance Tracking**
- The indicator tracks its own performance with win rate calculations
- Monitor the "AI Prediction" accuracy percentage
- Use the P&L tracking to assess signal quality over time
## 🔄 **Updates and Improvements**
This indicator is continuously evolving with:
- Enhanced machine learning algorithms
- Improved pattern recognition capabilities
- Additional correlation methods for better accuracy
- Performance optimization for faster calculations
- New visualization features based on user feedback
## 📚 **Technical Details**
### **Machine Learning Implementation**
- **Pattern Matching**: 20-bar normalized price patterns with historical comparison
- **Correlation Analysis**: Mathematical similarity scoring between current and historical patterns
- **Anomaly Detection**: Statistical Z-score analysis across price, volume, and RSI
- **Signal Weighting**: Multi-factor scoring system with optimized weights
### **Algorithm Components**
1. **Feature Extraction**: Price, volume, momentum, volatility, and trend features
2. **Pattern Recognition**: Historical pattern database with similarity matching
3. **Anomaly Detection**: Multi-dimensional Z-score threshold analysis
4. **Signal Generation**: Weighted scoring system with confidence intervals
5. **Performance Tracking**: Real-time win rate and accuracy monitoring
### **Calculation Methods**
- **Trend Strength**: (EMA8 - EMA21) / EMA21 * 100
- **Volume Ratio**: Current Volume / 20-period SMA Volume
- **BB Position**: (Close - BB_Lower) / (BB_Upper - BB_Lower)
- **Anomaly Score**: Average of normalized Z-scores for price, volume, and RSI
## 🎨 **Visual Elements**
### **Background Colors**
- **Light Green**: Perfect buy zone detected
- **Light Red**: Perfect sell zone detected
- **Light Blue**: Near bottom proximity
- **Green/Red Transparency**: Price anomaly detection
### **Signal Shapes**
- **Green Triangle Up**: Strong buy signal
- **Red Triangle Down**: Strong sell signal
- **Aqua Diamond**: Perfect buy zone entry
- **Purple Diamond**: Perfect sell zone entry
### **Table Information**
- **ML Complete Analysis**: 16 comprehensive metrics
- **Perfect Buy Conditions**: 7-point checklist with status indicators
- **Real-time Values**: Live updating of all calculations
- **Color-coded Status**: Green (good), Yellow (moderate), Red (caution)
## 🔍 **Troubleshooting**
### **Common Issues**
- **Table Not Showing**: Enable "Show ML Table" in settings
- **No Signals Appearing**: Check "Show Buy/Sell Signals" option
- **Performance Issues**: Reduce ML Lookback Period for faster calculation
- **Too Many/Few Signals**: Adjust Anomaly Threshold sensitivity
### **Optimization Tips**
- **For Day Trading**: Use lower timeframes (1m, 5m, 15m) with reduced lookback periods
- **For Swing Trading**: Use higher timeframes (1h, 4h, 1D) with standard settings
- **For Scalping**: Enable only strong signals and reduce pattern similarity threshold
- **For Long-term**: Increase all lookback periods and use daily/weekly timeframes
## 📖 **Disclaimer**
This indicator is for educational and informational purposes only. It should not be considered as financial advice. Trading involves substantial risk of loss and is not suitable for all investors. Past performance does not guarantee future results.
### **Risk Warning**
- All trading involves risk of substantial losses
- Never risk more than you can afford to lose
- This indicator does not guarantee profitable trades
- Always use proper risk management techniques
- Consider consulting with a financial advisor
### **Liability**
The creator of this indicator is not responsible for any losses incurred from its use. Users should thoroughly test and understand the indicator before using it with real money.
### **Feature Requests**
- Suggest improvements through TradingView comments
- Report bugs with detailed descriptions
- Share successful strategies using the indicator
- Contribute to community discussions
## 🏆 **Credits and Acknowledgments**
This indicator builds upon various open-source libraries and mathematical concepts:
- TradingView ZigZag library for visualization
- Statistical correlation methods from academic research
- Machine learning concepts adapted for financial markets
- Community feedback and testing contributions
## 📈 **Performance Metrics**
The indicator includes built-in performance tracking:
- **Win Rate Calculation**: Percentage of profitable signals
- **Signal Accuracy**: ML prediction vs actual price movement
- **Drawdown Tracking**: Current unrealized P&L from last signal
- **Completion Percentage**: How many perfect conditions are met
## 🔬 **Mathematical Foundation**
### **Correlation Calculations**
- **Pearson**: Measures linear correlation between patterns
- **Spearman**: Rank-based correlation for non-linear relationships
- **Cosine Similarity**: Vector-based similarity for pattern matching
### **Statistical Methods**
- **Z-Score**: (Value - Mean) / Standard Deviation
- **Pattern Normalization**: Price / Price
- **Volatility Percentile**: Historical ranking of current volatility
- **Momentum Calculation**: Price change over multiple periods
## 🎯 **Trading Strategies**
### **Conservative Approach**
- Wait for Perfect Buy Zone (85%+ completion)
- Use higher timeframes for confirmation
- Set stop-loss at recent swing low
- Take profits at resistance levels
### **Aggressive Approach**
- Trade on Strong Buy/Sell signals
- Use lower completion thresholds (70%+)
- Tighter stop-losses with faster exits
- Higher position sizes with confirmed trends
### **Hybrid Strategy**
- Combine with other indicators for confirmation
- Use different settings for different market conditions
- Scale in/out based on signal strength
- Adjust parameters based on market volatility
Brain Premium [ALGO]💡 Brain Premium ALGO
Brainpremium ALGO is a strategy algorithm that analyzes a two-phase regional liquidity structure and only opens positions on price breakouts occurring within these liquidity zones.
This system is developed based on the market experience of manual traders and automatically executes trade decisions using AI-like rules and specific triggers.
💡 Two-Phase Liquidity-Based Entry Strategy
This strategy operates by detecting liquidity sweep zones and confirmed reversal signals:
🔹 Phase 1 – Liquidity Sweep:
Price is expected to sweep areas where equal highs/lows or liquidity clusters exist. These zones are considered potential reversal levels.
🔹 Phase 2 – Confirmed Entry:
After liquidity is swept, entries are triggered only by confirmed reversal signals such as structural breaks, inside bars, or breakouts in the opposite direction.
✅ Entries are triggered only when liquidity and reversal confirmation occur simultaneously.
🎯 This approach targets high-probability, low-risk trades.
⚙️ Key Features
🔍 Dynamic Liquidity Detection — Automatically identifies liquidity zones.
🧩 Modular Entry Options (1–2–3) — Allows opening positions via different strategy paths.
🛡️ Dynamic Stop Loss System — Stop Loss adjusts as price moves favorably.
📈 Advanced Risk Management — Adjustable Take Profit, Stop Loss, leverage, balance, and mode.
🔔 JSON Alert Support — Connects to platforms like BingX via webhook.
🧾 Information Panel — Displays real-time trade data and strategy status.
📊 Backtest & Default Settings
Strategy tests are conducted with realistic and sustainable parameters:
Parameter Value
Trading Balance: $100 (%10 of total wallet)
Leverage: 10x
Stop Loss: 1%
Take Profit Type : High TP (optional: Low and Risky also available)
Entry Option 1 (optional: 2 and 3 also available)
Mode: NORMAL
Commission 0.05%
Dynamic Stop Loss: Enabled
Timeframe: 5 minute
Pair ETH/USDT
Duration: 30 days
🧭 Usage Instructions
Add Brain Premium ALGO to your TradingView chart.
Set position size, leverage, and SL/TP levels from the settings panel.
Select entry option (1, 2, or 3).
Activate backtesting and alert systems to monitor the strategy.
⚠️ Disclaimer
This strategy is not financial advice. Past performance does not guarantee future results. Trade only with capital you can afford to risk and always test thoroughly in a demo environment first.
ICT Smart Money Trading Suite [SwissAlgo]ICT/Smart Money Trading Suite - Technical Analysis Indicator
----------------------------------------------------------
OVERVIEW
The ICT/Smart Money Trading Suite is a technical analysis indicator that implements concepts from Inner Circle Trader (ICT) methodology and Smart Money Concepts (SMC).
ICT methodology was developed by Michael J. Huddleston (ICT) and focuses on understanding Institutional market behavior.
Smart Money Concepts builds upon these ideas to analyze how large Financial Institutions and/or Market Makers seem to operate in the markets.
This indicator combines multiple analytical tools into a single package for market structure analysis, imbalance detection, and the observation of institutional order flow.
----------------------------------------------------------
CORE COMPONENTS
Market Structure Analysis:
- External Structure : Major swing highs and lows that define broader price movement (these are the most significant structural points that institutions reference for their positioning and typically require substantial volume and momentum to break)
- Internal Structure : Shorter-term pivots showing micro-trend developments within the External Structure (these internal pivot highs and lows often represent areas where retail traders may be positioned on the wrong side of the market as they frequently form just before major structural breaks or trend continuations, creating liquidity that institutions can utilize)
- Structural Breakout Detection : Identification of structure breaks and potential trend changes ( 'Change of Character' which occurs when the External Structure shifts from bullish to bearish bias or vice-versa indicating a potential major trend reversal, and 'Break of Structure' which happens when price decisively takes out previous significant highs in a bearish trend or previous significant lows in a bullish trend confirming trend continuation or acceleration)
- EMA Cloud : Dynamic support and resistance zones with trend context (additional reference point)
Imbalance Zone Detection:
Fair Value Gaps (FVGs):
Price inefficiencies that occur between candles when sudden price moves create gaps in price delivery
Typically formed when the low of a bullish candle is higher than the high of the candle two periods prior, or when the high of a bearish candle is lower than the low of the candle two periods prior
These gaps represent areas where price moved too quickly without adequate two-way auction process
Institutions may return to fill these inefficiencies at a later time for proper price discovery
The theory suggests that all price ranges should eventually be traded through to complete the auction process
Gaps are automatically removed from the chart when price fully retraces back through the inefficient area
Order Blocks (OBs):
Specific candles that occur immediately before significant market moves and represent institutional decision points
Identified as the last opposing candle before a strong directional move (final bearish candle before major bullish move or final bullish candle before major bearish move)
These candles contain the orders and liquidity that institutions used as a foundation for their market manipulation
Represent areas where large institutional players positioned themselves to move the market significantly
Price may return to these levels to collect additional liquidity or test institutional resolve
The candle's full range (high to low) is considered the active zone where institutional interest may remain
Vector Candle Recovery:
Zones created by high-activity candles that demonstrate unusually large range and volume characteristics
These candles are interpreted as manipulative price pushes designed to hunt liquidity and trigger stop losses
Often used by institutions to induce retail traders into poor positions before reversing direction
Recovery zones represent the full range of these vector candles where price may retrace
The concept assumes that extreme moves often get partially retraced as the market corrects from artificial price displacement
Zones are invalidated when a significant portion of the vector candle range is retraced (typically 50% or more)
Support & Resistance:
Key price zones based on historical price reactions and pivot clustering analysis
Calculated through algorithmic identification of areas where price has repeatedly found buyers (support) or sellers (resistance)
Strength is determined by the number of times price has reacted from these levels and the volume of activity at these zones
Represent psychological and algorithmic reference points where institutional systems are likely to place orders
Create areas of increased probability for price reactions due to concentration of pending orders and decision-making activity
Zones are color-coded based on current price position: green for support (price above), red for resistance (price below), yellow for neutral (price within)
Liquidity Analysis:
- Liquidity Pools : Areas above or below key levels where stop orders may cluster
- Kill Zones : Time-based periods associated with increased market activity
- Daily/Weekly/Monthly Price Levels : Key institutional reference points (price highs/lows)
Vector Candles/Price Manipulation:
Advanced algorithm identifying statistically significant candles using volume delta analysis, range statistics, and persistence scoring.
----------------------------------------------------------
VISUAL INTERPRETATION - DETAILED GUIDE
MARKET STRUCTURE
External Structure (Thick Lines):
- Green thick lines: Major support levels (external lows) that define bullish structure
- Red thick lines: Major resistance levels (external highs) that define bearish structure
- These lines represent significant swing points that institutions may reference
- Lines extend from the swing point and update as the structure evolves
Internal Structure (Thin Lines):
- Green thin lines: Minor support levels showing internal market structure
- Red thin lines: Minor resistance levels showing internal market structure
- More frequent updates than external structure, showing micro-trend changes
Structure Markers:
- Small triangles with "H": External pivot highs (major resistance points)
- Small triangles with "L": External pivot lows (major support points)
- Small dots: Internal pivot points (minor structure without text)
- Markers appear with a 20-bar delay to confirm pivot validity
HIGHS/LOWS LEVELS
Daily Levels (Green Dashed Lines):
- Horizontal dashed lines marking the previous day's high and low
- Updates at the start of each new trading day
- Gradient effect shows historical importance (newer = more opaque)
- Acts as institutional reference points for intraday trading
Weekly Levels (White Dashed Lines):
- Horizontal dashed lines marking the previous week's high and low
- Updates at the start of each new trading week
- Typically more significant than daily levels for swing trading
- Often respected by institutional algorithms
Monthly Levels (Orange Dashed Lines):
- Horizontal dashed lines marking the previous month's high and low
- Updates at the start of each new trading month
- Highest significance levels for long-term institutional positioning
- Major psychological and algorithmic reference points
VECTOR CANDLES
Candle Body Coloring System:
- Lime Green Bodies: Ultra-bullish vector candles (Z-score ≥ 3.0)
- Blue Bodies: Abnormal bullish vector candles (Z-score 2.0-2.99)
- Bright Red Bodies: Ultra-bearish vector candles (Z-score ≥ 3.0)
- Purple Bodies: Abnormal bearish vector candles (Z-score 2.0-2.99)
- Faded Green/Red: Normal market activity candles
Vector Identification Criteria:
- Statistical significance based on range and volume delta
- Persistence scoring (how much directional pressure remained)
- ATR-based absolute detection (candles >2x ATR automatically qualify)
- These candles often precede significant market moves or reversals
EMA CLOUD
Purple Cloud Visualization:
- Central line: 50-period EMA (blue line)
- Upper boundary: EMA + dynamic standard deviation band
- Lower boundary: EMA - dynamic standard deviation band
- Cloud fill: Purple semi-transparent area between boundaries
Interpretation:
- Price above cloud: Bullish bias context
- Price below cloud: Bearish bias context
- Price within cloud: Neutral/transitional zone
- Cloud thickness adapts to market volatility automatically
KILL ZONES
Background Highlighting:
- Yellow background tint during active kill zone periods
- London Session: 08:00-11:00 (UTC+1 time)
- NY Open: 13:00-16:00 (UTC+1 time)
- NY Close: 19:00-21:00 (UTC+1 time)
- Times automatically adjust to the chart timezone
Purpose:
- Highlights periods of typically increased institutional activity
- Times when liquidity hunting and manipulation often occur
- Periods when significant directional moves frequently begin
IMBALANCE ZONES - DETAILED BREAKDOWN
Fair Value Gaps (FVGs):
- Green boxes: Bullish FVGs (gap between bear candle high and bull candle low)
- Red boxes: Bearish FVGs (gap between bull candle high and bear candle low)
- Gray dotted lines: Midpoint of each gap (50% retracement level)
- Text label: "Fair Value Gap" in top-right corner
- Auto-removal: Boxes disappear when the price fills the gap
Order Blocks (OBs):
- Green boxes: Bullish order blocks (demand zones from the last bear candle before bullish vector)
- Red boxes: Bearish order blocks (supply zones from the last bull candle before the bearish vector)
- Gray dotted lines: Midpoint of each order block
- Text label: "OB" in top-right corner
- Invalidation: Boxes removed when price breaks below (bull OB) or above (bear OB)
Vector Candles Recovery Zones:
- Green boxes: Recovery zones after bullish vector candles
- Red boxes: Recovery zones after bearish vector candles
- Gray dotted lines: Midpoint of the vector candle range
- Text label: "Vector Recovery" on the right side
- These mark the full range of significant vector candles where retracements may occur
Support & Resistance Zones:
- Green boxes: Support zones (price currently above the zone)
- Red boxes: Resistance zones (price currently below the zone)
- Yellow boxes: Neutral zones (price within the zone)
- Text labels: "Support", "Resistance", or "Support/Resistance"
- Based on historical pivot clustering and strength analysis
Liquidity Pools:
- Green boxes: Bullish liquidity pools (below recent lows where buy stops cluster)
- Red boxes: Bearish liquidity pools (above recent highs where sell stops cluster)
- Gray dotted lines: Key liquidity level within the pool
- Text label: "Liquidity Pool" on the right side
- Zones where institutional players may hunt stop losses before reversing
----------------------------------------------------------
CALCULATION METHODOLOGY
Vector Candle Algorithm:
- Statistical Analysis using 48-bar lookback period
- Z-score thresholds: 2.0 (abnormal), 3.0 (ultra)
- ATR-based significance filtering
- Volume Delta Integration with lower timeframe analysis
- Persistence scoring based on directional pressure sustainability
- Combined scoring system (delta + range)
- Absolute Vector Detection for candles exceeding 2x ATR
Market Structure Parameters:
- Swing Size: 20-period pivot detection
- Breakout Threshold: 3 consecutive breaks for structure confirmation
- EMA Length: 50-period with dynamic cloud sizing
Fair Value Gap Detection:
- Auto Threshold: Dynamic gap sizing based on asset volatility
- Manual Threshold: User-defined minimum gap percentage
- Mitigation Logic: Automatic removal when price fills gaps
----------------------------------------------------------
TARGET USERS
This indicator is designed for traders who:
- Study Inner Circle Trader concepts
- Apply Smart Money Concepts in their analysis
- Focus on market structure and institutional behavior
- Seek confluence-based trading approaches
- Use higher timeframe bias for decision making
Experience Level: Intermediate to Advanced
Requires understanding of market structure concepts and institutional trading theory.
Recommended Timeframes:
- Analysis: 4H, Daily for market structure context
- Execution: 1H, 15min for entry timing
- Lower timeframes: With higher timeframe alignment
----------------------------------------------------------
CUSTOMIZATION OPTIONS
Display Controls:
- Master toggle for all imbalance zones
- Individual controls for each concept type
- Market structure line visibility
- Kill zone highlighting
- EMA cloud display
Visual Settings:
- Automatic light/dark mode color adaptation
- Adjustable zone transparency levels
- Extension distance controls
- Descriptive text labels
Technical Parameters:
- Vector candle sensitivity thresholds
- Historical analysis lookback periods
- Maximum zone display limits
- Zone invalidation conditions
----------------------------------------------------------
EDUCATIONAL BACKGROUND
Inner Circle Trader (ICT): A trading methodology developed by Michael J. Huddleston that focuses on understanding how institutional traders and market makers operate. The approach emphasizes market structure, liquidity concepts, and timing based on institutional behavior patterns.
Smart Money Concepts (SMC): An evolution of ICT principles that analyzes how large financial institutions move markets. These concepts include order blocks, fair value gaps, liquidity hunting, and market structure shifts.
Both methodologies are based on the premise that understanding institutional trading behavior can provide insights into market direction and timing.
----------------------------------------------------------
IMPORTANT DISCLAIMERS
This indicator is provided for educational and analytical purposes only. It is not financial advice and does not guarantee trading results.
Trading involves substantial risk of loss. Past performance does not indicate future results. Users should thoroughly understand the underlying concepts before applying them to live trading.
The effectiveness of these analytical methods may vary across different market conditions, timeframes, and instruments. Proper risk management and additional analysis are essential.
This indicator is a tool for market analysis, not a complete trading system. Success requires understanding of market principles, risk management, and continuous learning.
Always test analytical approaches thoroughly using historical data and demo accounts before implementing with real capital.
Position Size Calculator with Fees# Position Size Calculator with Portfolio Management - Manual
## Overview
The Position Size Calculator with Portfolio Management is an advanced Pine Script indicator designed to help traders calculate optimal position sizes based on their total portfolio value and risk management strategy. This tool automatically calculates your risk amount based on portfolio allocation percentages and determines the exact position size needed while accounting for trading fees.
## Key Features
- **Portfolio-Based Risk Management**: Calculates risk based on total portfolio value
- **Tiered Risk Allocation**: Separates trading allocation from total portfolio
- **Automatic Trade Direction Detection**: Determines long/short based on entry vs stop loss
- **Fee Integration**: Accounts for trading fees in position size calculations
- **Risk Factor Adjustment**: Allows scaling of position size up or down
- **Visual Display**: Shows all calculations in a clear, color-coded table
- **Automatic Risk Calculation**: No need to manually input risk amount
## Input Parameters
### Total Portfolio ($)
- **Purpose**: The total value of your investment portfolio
- **Default**: 0.0
- **Range**: Any positive value
- **Step**: 0.01
- **Example**: If your total portfolio is worth $100,000, enter 100000
### Trading Portfolio Allocation (%)
- **Purpose**: The percentage of your total portfolio allocated to active trading
- **Default**: 20.0%
- **Range**: 0.0% to 100.0%
- **Step**: 0.01
- **Example**: If you allocate 20% of your portfolio to trading, enter 20
### Risk from Trading (%)
- **Purpose**: The percentage of your trading allocation you're willing to risk per trade
- **Default**: 0.1%
- **Range**: Any positive value
- **Step**: 0.01
- **Example**: If you risk 0.1% of your trading allocation per trade, enter 0.1
### Entry Price ($)
- **Purpose**: The price at which you plan to enter the trade
- **Default**: 0.0
- **Range**: Any positive value
- **Step**: 0.01
### Stop Loss ($)
- **Purpose**: The price at which you will exit if the trade goes against you
- **Default**: 0.0
- **Range**: Any positive value
- **Step**: 0.01
### Risk Factor
- **Purpose**: A multiplier to scale your position size up or down
- **Default**: 1.0 (no scaling)
- **Range**: 0.0 to 10.0
- **Step**: 0.1
- **Examples**:
- 1.0 = Normal position size
- 2.0 = Double the position size
- 0.5 = Half the position size
### Fee (%)
- **Purpose**: The percentage fee charged per transaction
- **Default**: 0.01% (0.01)
- **Range**: 0.0% to 1.0%
- **Step**: 0.001
## How Risk Amount is Calculated
The script automatically calculates your risk amount using this formula:
```
Risk Amount = Total Portfolio × Trading Allocation (%) × Risk % ÷ 10,000
```
### Example Calculation:
- Total Portfolio: $100,000
- Trading Allocation: 20%
- Risk per Trade: 0.1%
**Risk Amount = $100,000 × 20 × 0.1 ÷ 10,000 = $20**
This means you would risk $20 per trade, which is 0.1% of your $20,000 trading allocation.
## Portfolio Structure Example
Let's say you have a $100,000 portfolio:
### Allocation Structure:
- **Total Portfolio**: $100,000
- **Trading Allocation (20%)**: $20,000
- **Long-term Investments (80%)**: $80,000
### Risk Management:
- **Risk per Trade (0.1% of trading)**: $20
- **Maximum trades at risk**: Could theoretically have 1,000 trades before risking entire trading allocation
## How Position Size is Calculated
### Trade Direction Detection
- **Long Trade**: Entry price > Stop loss price
- **Short Trade**: Entry price < Stop loss price
### Position Size Formulas
#### For Long Trades:
```
Position Size = -Risk Factor × Risk Amount / (Stop Loss × (1 - Fee) - Entry Price × (1 + Fee))
```
#### For Short Trades:
```
Position Size = -Risk Factor × Risk Amount / (Entry Price × (1 - Fee) - Stop Loss × (1 + Fee))
```
## Output Display
The indicator displays a comprehensive table with color-coded sections:
### Portfolio Information (Light Blue Background)
- **Portfolio (USD)**: Your total portfolio value
- **Trading Portfolio Allocation (%)**: Percentage allocated to trading
- **Risk as % of Trading**: Risk percentage per trade
### Trade Setup (Gray Background)
- **Entry Price**: Your specified entry price
- **Stop Loss**: Your specified stop loss price
- **Fee (%)**: Trading fee percentage
- **Risk Factor**: Position size multiplier
### Risk Analysis (Red Background)
- **Risk Amount**: Automatically calculated dollar risk
- **Effective Entry**: Actual entry cost including fees
- **Effective Exit**: Actual exit value including fees
- **Expected Loss**: Calculated loss if stop loss is hit
- **Deviation from Risk %**: Accuracy of risk calculation
### Final Result (Blue Background)
- **Position Size**: Number of shares/units to trade
## Usage Examples
### Example 1: Conservative Long Trade
- **Total Portfolio**: $50,000
- **Trading Allocation**: 15%
- **Risk per Trade**: 0.05%
- **Entry Price**: $25.00
- **Stop Loss**: $24.00
- **Risk Factor**: 1.0
- **Fee**: 0.01%
**Calculated Risk Amount**: $50,000 × 15% × 0.05% ÷ 100 = $3.75
### Example 2: Aggressive Short Trade
- **Total Portfolio**: $200,000
- **Trading Allocation**: 30%
- **Risk per Trade**: 0.2%
- **Entry Price**: $150.00
- **Stop Loss**: $155.00
- **Risk Factor**: 2.0
- **Fee**: 0.01%
**Calculated Risk Amount**: $200,000 × 30% × 0.2% ÷ 100 = $120
**Actual Risk**: $120 × 2.0 = $240 (due to risk factor)
## Color Coding System
- **Green/Red Header**: Trade direction (Long/Short)
- **Light Blue**: Portfolio management parameters
- **Gray**: Trade setup parameters
- **Red**: Risk-related calculations and results
- **Blue**: Final position size result
## Best Practices
### Portfolio Management
1. **Keep trading allocation reasonable** (typically 10-30% of total portfolio)
2. **Use conservative risk percentages** (0.05-0.2% per trade)
3. **Don't risk more than you can afford to lose**
### Risk Management
1. **Start with small risk factors** (1.0 or less) until comfortable
2. **Monitor your total exposure** across all open positions
3. **Adjust risk based on market conditions**
### Trade Execution
1. **Always validate calculations** before placing trades
2. **Account for slippage** in volatile markets
3. **Consider position size relative to liquidity**
## Risk Management Guidelines
### Conservative Approach
- Trading Allocation: 10-20%
- Risk per Trade: 0.05-0.1%
- Risk Factor: 0.5-1.0
### Moderate Approach
- Trading Allocation: 20-30%
- Risk per Trade: 0.1-0.15%
- Risk Factor: 1.0-1.5
### Aggressive Approach
- Trading Allocation: 30-40%
- Risk per Trade: 0.15-0.25%
- Risk Factor: 1.5-2.0
## Troubleshooting
### Common Issues
1. **Position Size shows 0**
- Verify all portfolio inputs are greater than 0
- Check that entry price differs from stop loss
- Ensure calculated risk amount is positive
2. **Very small position sizes**
- Increase risk percentage or risk factor
- Check if your risk amount is too small for the price difference
3. **Large risk deviation**
- Normal for very small positions
- Consider adjusting entry/stop loss levels
### Validation Checklist
- Total portfolio value is realistic
- Trading allocation percentage makes sense
- Risk percentage is conservative
- Entry and stop loss prices are valid
- Trade direction matches your intention
## Advanced Features
### Risk Factor Usage
- **Scaling up**: Use risk factors > 1.0 for high-confidence trades
- **Scaling down**: Use risk factors < 1.0 for uncertain trades
- **Never exceed**: Risk factors that would risk more than your comfort level
### Multiple Timeframe Analysis
- Use different risk factors for different timeframes
- Consider correlation between positions
- Adjust trading allocation based on market conditions
## Disclaimer
This tool is for educational and planning purposes only. Always verify calculations manually and consider market conditions, liquidity, and correlation between positions. The automated risk calculation assumes you're comfortable with the mathematical relationship between portfolio allocation and individual trade risk. Past performance doesn't guarantee future results, and all trading involves risk of loss.
Lot Size Calculator (SL Percentage) - Futures ⚠️ IMPORTANT DISCLAIMER
This indicator is provided for educational and informational purposes only. The author assumes no responsibility for any financial losses, code errors, calculation mistakes, or trading decisions based on this tool. Use at your own risk and responsibility. Always manually verify calculations before opening real positions.
Contract size calculations are based on standard full-size futures contracts, not micro contracts (even though micro contracts are supported for identification).
Description
Money management tool for automatic calculation of optimal contract size (lot size) in futures trading. Supports over 50 futures instruments with pre-configured tick sizes and pip values for CME and other exchanges.
Supported Instruments
Currency Futures: 6J, 6E, 6B, 6A, 6C, 6S, 6N
Index Futures: ES, NQ, YM, RTY, MES, MNQ, MYM, M2K, NKD
Energy: CL, NG, HO, RB, QM
Metals: GC, SI, HG, MGC, SIL
Agricultural: ZC, ZS, ZW, HE, LE, ZO, ZR, ZM, ZL
Interest Rates: ZN, ZB, ZT, ZF
Crypto: MBT, MET
Others: VX
Main Parameters
Equity : Total available capital
Risk : Maximum risk percentage per trade
Stop Loss : Percentage distance of stop loss
Risk/Reward Ratio: Ratio to calculate take profit
Entry Price: Entry price (0 = current price)
Stop Loss Modes
Percentage Stop Loss (Use SL in % = ON):
Automatically calculates SL level as percentage from entry price
Example: Entry 100, SL 2% → Long SL at 98, Short SL at 102
Manual Stop Loss (Use SL in % = OFF):
Enter exact stop loss price directly
Greater precision for specific technical levels (support/resistance)
Interactive feature: You can drag the red stop loss line directly on the chart to modify the level in real-time
How to Use
Set equity and risk % according to your trading plan
Choose direction (Long/Short) and stop loss (percentage or price)
Enter entry price (optional)
Read the CONTRACT SIZE in the green table
Verify levels Entry/SL/TP on the graphic lines
Output
Information table with all parameters and highlighted CONTRACT SIZE
Graphic lines: Entry (blue), Stop Loss (red), Take Profit (green)
Configurable alerts with calculated values
Advantages
✅ Automatic calculation of optimal size
✅ Precise tick sizes for each instrument
✅ Systematic risk management
✅ Clear visual interface
✅ Multi-asset support on futures
Warnings
⚠️ Always verify that the instrument is recognized (no orange warning)
⚠️ Manually check calculations before trading
⚠️ Test in demo before using with real money
⚠️ Update regularly for any contract modifications
⚠️ DISCLAIMER IMPORTANTE
Questo indicatore è fornito esclusivamente a scopo educativo e informativo. L'autore non si assume alcuna responsabilità per eventuali perdite finanziarie, errori nel codice, calcoli errati o decisioni di trading basate su questo strumento. L'utilizzo è a proprio rischio e responsabilità. Si raccomanda di verificare sempre manualmente i calcoli prima di aprire posizioni reali.
I calcoli della dimensione del contratto sono basati su contratti futures standard full-size, non micro contratti (anche se i micro contratti sono supportati per l'identificazione).
Descrizione
Strumento di money management per il calcolo automatico della dimensione ottimale del contratto (lot size) nel trading di futures. Supporta oltre 50 strumenti futures con tick size e pip value pre-configurati per mercati CME e altri exchange.
Strumenti Supportati
Currency Futures: 6J, 6E, 6B, 6A, 6C, 6S, 6N
Index Futures: ES, NQ, YM, RTY, MES, MNQ, MYM, M2K, NKD
Energy: CL, NG, HO, RB, QM
Metals: GC, SI, HG, MGC, SIL
Agricultural: ZC, ZS, ZW, HE, LE, ZO, ZR, ZM, ZL
Interest Rates: ZN, ZB, ZT, ZF
Crypto: MBT, MET
Altri: VX
Parametri Principali
Equity : Capitale totale disponibile
Risk : Percentuale massima di rischio per trade
Stop Loss : Distanza percentuale dello stop loss
Risk/Reward Ratio: Rapporto per calcolare il take profit
Entry Price: Prezzo di entrata (0 = prezzo corrente)
Modalità Stop Loss
Stop Loss Percentuale (Use SL in % = ON):
Calcola automaticamente il livello SL come percentuale dal prezzo di entrata
Esempio: Entry 100, SL 2% → SL Long a 98, SL Short a 102
Stop Loss Manuale (Use SL in % = OFF):
Inserisci direttamente il prezzo esatto dello stop loss
Maggiore precisione per livelli tecnici specifici (supporti/resistenze)
Funzione interattiva: Puoi trascinare direttamente la linea rossa dello stop loss sul grafico per modificare il livello in tempo reale
Come Usare
Imposta equity e risk % secondo il tuo piano di trading
Scegli direzione (Long/Short) e stop loss (percentuale o prezzo)
Inserisci entry price (opzionale)
Leggi il CONTRACT SIZE nella tabella verde
Verifica i livelli Entry/SL/TP sulle linee grafiche
Output
Tabella informativa con tutti i parametri e il CONTRACT SIZE evidenziato
Linee grafiche: Entry (blu), Stop Loss (rosso), Take Profit (verde)
Alert configurabile con i valori calcolati
Vantaggi
✅ Calcolo automatico della size ottimale
✅ Tick size precisi per ogni strumento
✅ Risk management sistematico
✅ Interfaccia visiva chiara
✅ Supporto multi-asset su futures
Avvertenze
⚠️ Verifica sempre che lo strumento sia riconosciuto (no warning arancione)
⚠️ Controlla manualmente i calcoli prima di tradare
⚠️ Testa in demo prima dell'uso con denaro reale
⚠️ Aggiorna regolarmente per eventuali modifiche ai contratti
Initial balance - weeklyWeekly Initial Balance (IB) — Indicator Description
The Weekly Initial Balance (IB) is the price range (High–Low) established during the week’s first trading session (most commonly Monday). You can measure it over the entire day or just the first X hours (e.g. 60 or 120 minutes). Once that session ends, the IB High and IB Low define the key levels where the initial weekly range formed.
Why Measure the Weekly IB?
Week-Opening Sentiment:
Monday’s range often sets the tone for the rest of the week. Trading above the IB High signals bullish control; trading below the IB Low signals bearish control.
Key Liquidity Zones:
Large institutions tend to place orders around these extremes, so you’ll frequently see tests, breakouts, or rejections at these levels.
Support & Resistance:
The IB High and IB Low become natural barriers. Price will often return to them, bounce off them, or break through them—ideal spots for entries and exits.
Volatility Forecast:
The width of the IB (High minus Low) indicates whether to expect a volatile week (wide IB) or a quieter one (narrow IB).
Significance of IB Levels
Breakout:
A clear break above the IB High (for longs) or below the IB Low (for shorts) can ignite a strong trending move.
Fade:
A rejection off the IB High/Low during low momentum (e.g. low volume or pin-bar formations) offers a high-probability reversal trade.
Mid-Point:
The 50% level of the IB range often “magnetizes” price back to it, providing entry points for continuation or reversal strategies.
Three Core Monday IB Strategies
A. Breakout (Open-Range Breakout)
Entry: Wait for 1–2 candles (e.g. 5-minute) to close above IB High (long) or below IB Low (short).
Stop-Loss: A few pips below IB High (long) or above IB Low (short).
Profit-Target: 2–3× your risk (Reward:Risk ≥ 2:1).
Best When: You spot a clear impulse—such as a strong pre-open volume spike or news-driven move.
B. Fade (Reversal at Extremes)
Entry: When price tests IB High but shows weakening momentum (shrinking volume, upper-wick candles), enter short; vice versa for IB Low and longs.
Stop-Loss: Just beyond the IB extreme you’re fading.
Profit-Target: Back toward the IB mid-point (50% level) or all the way to the opposite IB extreme.
Best When: Monday’s action is range-bound and lacks a clear directional trend.
C. Mid-Point Trading
Entry: When price returns to the 50% level of the IB range.
In an up-trend: buy if it bounces off mid-point back toward IB High.
In a down-trend: sell if it reverses off mid-point back toward IB Low.
Stop-Loss: Just below the nearest swing-low (for longs) or above the nearest swing-high (for shorts).
Profit-Target: To the corresponding IB extreme (High or Low).
Best When: You see a strong initial move away from the IB, followed by a pullback to the mid-point.
Usage Steps
Configure your session: Measure IB over your chosen Monday timeframe (whole day or first X hours).
Choose your strategy: Align Breakout, Fade, or Mid-Point entries with the current market context (trend vs. range).
Manage risk: Keep risk per trade ≤ 1% of account and maintain at least a 2:1 Reward:Risk ratio.
Backtest & forward-test: Verify performance over multiple Mondays and in a paper-trading environment before going live.
RSI MSB | QuantMAC📊 RSI MSB | QuantMAC
🎯 Overview
The RSI MSB (Momentum Shifting Bands) represents a groundbreaking fusion of traditional RSI analysis with advanced momentum dynamics and adaptive volatility bands. This sophisticated indicator combines RSI smoothing , relative momentum calculations , and dynamic standard deviation bands to create a powerful oscillator that automatically adapts to changing market conditions, providing superior signal accuracy across different trading environments.
🔧 Key Features
Hybrid RSI-Momentum Engine : Proprietary combination of smoothed RSI with relative momentum analysis
Dynamic Adaptive Bands : Self-adjusting volatility bands that respond to indicator strength
Dual Trading Modes : Flexible Long/Short or Long/Cash strategies for different risk preferences
Advanced Performance Analytics : Comprehensive metrics including Sharpe, Sortino, and Omega ratios
Smart Visual System : Dynamic color coding with 9 professional color schemes
Precision Backtesting : Date range filtering with detailed historical performance analysis
Real-time Signal Generation : Clear entry/exit signals with customizable threshold sensitivity
Position Sizing Intelligence : Half Kelly criterion for optimal risk management
📈 How The MSB Technology Work
The Momentum Shifting Bands technology is built on a revolutionary approach that combines multiple signal sources into one cohesive system:
RSI Foundation : 💪
Calculate traditional RSI using customizable length and source
Apply exponential smoothing to reduce noise and false signals
Normalize values for consistent performance across different timeframes
Momentum Analysis Engine : ⚡
Compute fast and slow momentum using rate of change calculations
Calculate relative momentum by comparing fast vs slow momentum
Normalize momentum values to 0-100 scale for consistency
Apply smoothing to create stable momentum readings
Dynamic Combination : 🔄
The genius of MSB lies in its weighted combination of RSI and momentum signals. The momentum weight parameter allows traders to adjust the balance between RSI stability and momentum responsiveness, creating a hybrid indicator that captures both trend continuation and reversal signals.
Adaptive Band System : 🎯
Calculate dynamic standard deviation multiplier based on indicator strength
Generate upper and lower bands that expand during high volatility periods
Create normalized oscillator that scales between band boundaries
Provide visual reference for overbought/oversold conditions
⚙️ Comprehensive Parameter Control
RSI Settings : 📊
RSI Length: Controls the period for RSI calculation (default: 21)
Source: Price input selection (close, open, high, low, etc.)
RSI Smoothing: Reduces noise in RSI calculations (default: 20)
Momentum Settings : 🔥
Fast Momentum Length: Short-term momentum period (default: 19)
Slow Momentum Length: Long-term momentum period (default: 21)
Momentum Weight: Balance between RSI and momentum (default: 0.6)
Oscillator Settings : ⚙️
Base Length: Foundation moving average for band calculations (default: 40)
Standard Deviation Length: Period for volatility measurement (default: 53)
SD Multiplier: Base band width adjustment (default: 0.7)
Oscillator Multiplier: Scaling factor for oscillator values (default: 100)
Signal Thresholds : 🎯
Long Threshold: Bullish signal trigger level (default: 93)
Short Threshold: Bearish signal trigger level (default: 53)
🎨 Advanced Visual System
Main Chart Elements : 📈
Dynamic Shifting Bands: Upper and lower bands with intelligent transparency
Adaptive Fill Zone: Color-coded area between bands showing current market state
Basis Line: Moving average foundation displayed as subtle reference points
Smart Bar Coloring: Candles change color based on oscillator state for instant visual feedback
Oscillator Pane : 📊
Normalized MSB Oscillator: Main signal line with dynamic coloring based on market state
Threshold Lines: Horizontal reference lines for entry/exit levels
Zero Line: Central reference for oscillator neutrality
Color State Indication: Line colors change based on bullish/bearish conditions
📊 Professional Performance Metrics
The built-in analytics suite provides institutional-grade performance measurement:
Net Profit % : Total strategy return percentage
Maximum Drawdown % : Worst peak-to-trough decline
Win Rate % : Percentage of profitable trades
Profit Factor : Ratio of gross profits to gross losses
Sharpe Ratio : Risk-adjusted return measurement
Sortino Ratio : Downside-focused risk adjustment
Omega Ratio : Probability-weighted performance ratio
Half Kelly % : Optimal position sizing recommendation
Total Trades : Complete transaction count
🎯 Strategic Trading Applications
Long/Short Mode : ⚡
Maximizes profit potential by capturing both upward and downward price movements. The MSB technology helps identify when momentum is building in either direction, allowing for optimal position switches between long and short positions.
Long/Cash Mode : 🛡️
Conservative approach ideal for retirement accounts or risk-averse traders. The indicator's adaptive nature helps identify the best times to be invested versus sitting in cash, protecting capital during adverse market conditions.
🚀 Unique Advantages
Traditional Indicators vs RSI MSB :
Static vs Dynamic: While most indicators use fixed parameters, MSB bands adapt based on indicator strength
Single Signal vs Multi-Signal: Combines RSI reliability with momentum responsiveness
Lagging vs Balanced: Optimized balance between signal speed and accuracy
Simple vs Intelligent: Advanced momentum analysis provides superior market insight
💡 Professional Setup Guide
For Day Trading (Short-term) : 📱
RSI Length: 14-18
RSI Smoothing: 12-15
Momentum Weight: 0.7-0.8
Thresholds: Long 90, Short 55
For Swing Trading (Medium-term) : 📊
RSI Length: 21-25 (default range)
RSI Smoothing: 18-22
Momentum Weight: 0.5-0.7
Thresholds: Long 93, Short 53 (defaults)
For Position Trading (Long-term) : 📈
RSI Length: 25-30
RSI Smoothing: 25-30
Momentum Weight: 0.4-0.6
Thresholds: Long 95, Short 50
🧠 Advanced Trading Techniques
MSB Divergence Analysis : 🔍
Watch for divergences between price action and MSB readings. When price makes new highs/lows but the oscillator doesn't confirm, it often signals upcoming reversals or momentum shifts.
Band Width Interpretation : 📏
Expanding Bands: Increasing volatility, expect larger price moves
Contracting Bands: Decreasing volatility, prepare for potential breakouts
Band Touches: Price touching outer bands often signals reversal opportunities
Multi-Timeframe Analysis : ⏰
Use MSB on higher timeframes for trend direction and lower timeframes for precise entry timing. The momentum component makes it particularly effective for timing entries within established trends.
⚠️ Important Risk Disclaimers
Critical Risk Factors :
Market Conditions: No indicator performs equally well in all market environments
Backtesting Limitations: Historical performance may not reflect future market behavior
Parameter Sensitivity: Different settings may produce significantly different results
Volatility Risk: Momentum-based indicators can be sensitive to extreme market conditions
Capital Risk: Always use appropriate position sizing and stop-loss protection
📚 Educational Benefits
This indicator provides exceptional learning opportunities for understanding:
Advanced RSI analysis and momentum integration techniques
Adaptive indicator design and dynamic band calculations
The relationship between momentum shifts and price movements
Professional risk management using Kelly Criterion principles
Modern oscillator interpretation and multi-signal analysis
🔍 Market Applications
The RSI MSB works effectively across various markets:
Forex : Excellent for currency pair momentum analysis
Stocks : Individual equity and index trading with momentum confirmation
Commodities : Adaptive to commodity market momentum cycles
Cryptocurrencies : Handles extreme volatility with momentum filtering
Futures : Professional derivatives trading applications
🔧 Technical Innovation
The RSI MSB represents advanced research into multi-signal technical analysis. The proprietary momentum-RSI combination has been optimized for:
Computational Efficiency : Fast calculation even on high-frequency data
Signal Clarity : Clear, actionable trading signals with reduced noise
Market Adaptability : Automatic adjustment to changing momentum conditions
Parameter Flexibility : Wide range of customization options for different trading styles
🔔 Updates and Evolution
The RSI MSB | QuantMAC continues to evolve with regular updates incorporating the latest research in momentum-based technical analysis. The comprehensive parameter set allows for extensive customization and optimization across different market conditions.
Past Performance Disclaimer : Past performance results shown by this indicator are hypothetical and not indicative of future results. Market conditions change continuously, and no trading system or methodology can guarantee profits or prevent losses. Historical backtesting may not reflect actual trading conditions including market liquidity, slippage, and fees that would affect real trading results.
Master The Markets With Multi-Signal Intelligence! 🎯📈